Khi bạn có một trường mô hình với tùy chọn lựa chọn, bạn có xu hướng có một số giá trị ma thuật được liên kết với tên con người có thể đọc được. Có cách nào trong Django thuận tiện để đặt các trường này bằng tên có thể đọc được của con người thay vì giá trị không?
Hãy xem xét mô hình này:
class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
Tại một thời điểm nào đó, chúng tôi có một cá thể Thing và chúng tôi muốn đặt mức độ ưu tiên của nó. Rõ ràng là bạn có thể làm,
thing.priority = 1
Nhưng điều đó buộc bạn phải ghi nhớ ánh xạ Giá trị-Tên các ƯU TIÊN. Điều này không hoạt động:
thing.priority = 'Normal' # Throws ValueError on .save()
Hiện tại tôi có cách giải quyết ngớ ngẩn này:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
nhưng điều đó thật khó hiểu. Với mức độ phổ biến của kịch bản này, tôi đã tự hỏi liệu có ai có giải pháp tốt hơn không. Có một số phương pháp trường để đặt trường theo tên lựa chọn mà tôi hoàn toàn bỏ qua không?