tutorial formularios avanzados django templates django-admin django-templates detailview

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.