tengo un modelo:las plantillas de Django: la versión detallada de una elección
from django.db import models
CHOICES = (
('s', 'Glorious spam'),
('e', 'Fabulous eggs'),
)
class MealOrder(models.Model):
meal = models.CharField(max_length=8, choices=CHOICES)
Tengo una forma:
from django.forms import ModelForm
class MealOrderForm(ModelForm):
class Meta:
model = MealOrder
Y quiero usar formtools.preview. La plantilla por defecto imprime la versión corta de la elección ('e' en lugar de 'huevos' Fabulous), becuase que utiliza
{% for field in form %}
<tr>
<th>{{ field.label }}:</th>
<td>{{ field.data }}</td>
</tr>
{% endfor %}.
Me gustaría tener una plantilla tan general como el mencionado, pero la impresión 'huevos Fabulous 'en cambio.
[ya que tenía dudas dónde está la verdadera cuestión, que en negrita que para todos nosotros :)]
Yo sé cómo conseguir la versión detallada de la elección de una manera que es en sí misma fea:
{{ form.meal.field.choices.1.1 }}
el dolor real es que necesito para obtener la opción seleccionada, y la única manera que viene a la mente es iteración a través de decisiones y el control de {% ifequals currentChoice.0 choiceField.data %}
, lo que es aún más feo.
¿Se puede hacer fácilmente? ¿O necesita alguna programación de etiqueta de plantilla? ¿No debería estar ya disponible en django?
sí, lo sé. Aunque no es tan general (universal), a menos que sepa una forma de iterar en una plantilla sobre todos los métodos get_FOO_display de un objeto modelo :) Soy demasiado perezoso para escribir plantillas no genéricas;) Además, la docs dicen que es el método de una instancia modelo. Por lo tanto, tendría que ser un formulario modelo vinculado a un objeto existente que no es el caso y tampoco es general. –
Siempre me olvido de este – Sevenearths
Tenga en cuenta que este uso no se limita a las vistas, get_FOO_display() es un método en el objeto modelo en sí mismo para que pueda usarlo también en el código del modelo. Por ejemplo, en __unicode __() es muy útil – Bogatyr