선택 옵션이있는 모델 필드를 사용하면 사람이 읽을 수있는 이름과 관련된 일부 마법 값을 갖는 경향이 있습니다. 장고에 값 대신 사람이 읽을 수있는 이름으로 필드를 설정하는 편리한 방법이 있습니까? Django IntegerField를 choices = ...로 설정합니다.
이 모델 고려 :class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
우리는 것 인스턴스가 어떤 점에서하고 우리는 우선 순위를 설정합니다. 분명히 할 수있다.
thing.priority = 1
그러나 이것은 당신이 우선 순위의 값 - 이름 매핑을 암기하도록 만든다.
thing.priority = 'Normal' # Throws ValueError on .save()
은 현재 내가이 바보 해결 방법이 있습니다 :이 작동하지 않습니다
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
을하지만 어설픈입니다. 이 시나리오가 얼마나 흔한 일인가를 생각해 보면 나는 누구에게 더 나은 솔루션이 있는지 궁금해하고 있었다. 내가 간과 한 선택 이름으로 필드를 설정하기위한 필드 방법이 있습니까?
그 주제에 관해 자세히 설명하는 블로그입니다. 너무 Google에 찾기 너무 어렵습니다. –
FWIW, 리터럴 문자열 (양식, 사용자 입력 등)에서 설정해야하는 경우 thing.priority = getattr (thing, strvalue.upper())를 사용하면됩니다. – mrooney
블로그의 캡슐화 섹션을 정말 좋아합니다. –