Wenn Sie ein Modellfeld mit einer Auswahloption haben, sind in der Regel einige magische Werte mit von Menschen lesbaren Namen verknüpft. Gibt es in Django eine bequeme Möglichkeit, diese Felder durch den vom Menschen lesbaren Namen anstelle des Werts festzulegen?
Betrachten Sie dieses Modell:
class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
Irgendwann haben wir eine Thing-Instanz und möchten ihre Priorität festlegen. Offensichtlich könnten Sie tun,
thing.priority = 1
Dies zwingt Sie jedoch dazu, sich die Wert-Name-Zuordnung von PRIORITÄTEN zu merken. Das funktioniert nicht:
thing.priority = 'Normal' # Throws ValueError on .save()
Derzeit habe ich diese dumme Problemumgehung:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
aber das ist klobig. Angesichts der Häufigkeit dieses Szenarios fragte ich mich, ob jemand eine bessere Lösung hätte. Gibt es eine Feldmethode zum Festlegen von Feldern nach Auswahlnamen, die ich völlig übersehen habe?