Ich möchte die benannten Werte eines Auswahlfelds für eine Auswahl erhalten, die derzeit nicht ausgewählt ist. Ist das möglich?
Zum Beispiel: models.py
FILE_STATUS_CHOICES = (
('P', 'Pending'),
('A', 'Approved'),
('R', 'Rejected'),
)
class File(models.Model):
status = models.CharField(max_length=1, default='P', choices=FILE_STATUS_CHOICES)
views.py
f = File()
f.status = 'P'
f.save()
old_value = f.status
print f.get_status_display()
> Pending
f.status = 'A'
f.save()
new_value = f.status
print f.get_status_display()
> Approved
Wie kann ich den alten Anzeigewert von 'P' auf 'Ausstehend' setzen? Ich kann dazu in der Lage sein, ein Formular in der Ansicht zu erstellen und auf sein Wörterbuch der Werte/Bezeichnungen zuzugreifen. Ist dies der beste/einzige Ansatz?
Dies ist ziemlich in Ordnung, um Ihr Auswahl-Mapping FILE_STATUS_CHOICES
von Modellen zu importieren und es zu verwenden, um Pending
durch P
zu erhalten:
from my_app.models import FILE_STATUS_CHOICES
print dict(FILE_STATUS_CHOICES).get('P')
Die get_FIELD_display()
-Methode Ihres Modells macht im Wesentlichen dasselbe:
def _get_FIELD_display(self, field):
value = getattr(self, field.attname)
return force_text(dict(field.flatchoices).get(value, value), strings_only=True)
Da es im Modellfeld ein flatchoices
-Feld gibt, können Sie es mithilfe der _meta
- und get_field_by_name()
-Methode verwenden:
choices = f._meta.get_field_by_name('name')[0].flatchoices
print dict(choices).get('P')
dabei ist f
Ihre Modellinstanz.
Siehe auch:
Ich empfehle die Verwendung von Choice
aus Django-model-utils
: https://Django-model-utils.readthedocs.io/de/latest/utilities.html#choices .
Ich verwende es in jedem meiner Modelle, wenn ich ein Auswahlfeld brauche. Siehe Beispiele, es hat ausgezeichnete Optionen.