tutorial - formularios avanzados django
La plantilla Django DetailView muestra los valores de visualizaciĆ³n de todos los campos (1)
Creo que deberías agregar otro método:
def get_field_value(self, field):
try:
return self._get_FIELD_display(field)
except something:
return field._get_val_from_obj(self)
Y úsalo en tu generador.
Inventé una plantilla para mostrar todos los campos y valores de un modelo, se ve así:
## detail_template.html ##
{% for name, value in object.get_fields %}
<p>
<label>{% trans name %}:</label>
<span>{{ value|default:"Not available" }}</span>
</p>
{% endfor %}
En la clase puedes ver la función get_fields declarada:
## models.py ##
Class Object:
...many fields...
def get_fields(self):
return [(field.verbose_name, field._get_val_from_obj(self)) for field in self.__class__._meta.fields]
El problema es cuando tengo, por ejemplo, un CharField con opciones, como:
## models.py ##
GENDER_CHOICES = (
(''M'', ''Male''),
(''F'', ''Female''),
)
...all other fields ...
sex = models.CharField(verbose_name=u"Sex", max_length=1, choices=GENDER_CHOICES)
Muestra M o F, lo que quiero hacer es cargar el get_NAMEFIELD_display de todos los campos sin hacer manualmente todos los campos:
<p>
<label>{% trans ''Sex'' %}:</label>
<span>{{ object.get_sex_display|default:"Not available" }}</span>
</p>
Tengo una pista: Django Contrib Admin lo hace cuando lista objetos, así que estoy seguro de que hay una manera genérica de hacerlo y también agradezco cualquier ayuda.