python - template - django views urls
Django: Accede a las tuplas del campo dado. (2)
Esto es bastante bueno para importar su asignación de FILE_STATUS_CHOICES
de los modelos y usarla para obtener Pending
por P
:
from my_app.models import FILE_STATUS_CHOICES
print dict(FILE_STATUS_CHOICES).get(''P'')
get_FIELD_display()
método get_FIELD_display()
en su modelo está haciendo esencialmente lo mismo:
def _get_FIELD_display(self, field):
value = getattr(self, field.attname)
return force_text(dict(field.flatchoices).get(value, value), strings_only=True)
Y, dado que hay un campo de flatchoices
en el campo del modelo, puede usarlo con la ayuda del _meta
y get_field_by_name()
:
choices = f._meta.get_field_by_name(''name'')[0].flatchoices
print dict(choices).get(''P'')
donde f
es tu instancia de modelo
Ver también:
Me gustaría obtener los valores nombrados de un campo de opciones para una opción que no está seleccionada actualmente. es posible?
Por ejemplo: modelos.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)
vistas.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
¿Cómo puedo obtener el valor de visualización anterior de ''P'' a ''Pendiente''? Puedo hacerlo creando un formulario en la vista y accediendo a su diccionario de valores / etiquetas. ¿Es este el mejor / único enfoque?
Recomiendo usar Choice
de django-model-utils
: https://django-model-utils.readthedocs.io/en/latest/utilities.html#choices .
Lo uso en todos mis modelos si necesito un campo de elección. Ver ejemplos, tiene excelentes opciones.