j'ai un modèle:modèles Django: la version verbeux d'un choix
from django.db import models
CHOICES = (
('s', 'Glorious spam'),
('e', 'Fabulous eggs'),
)
class MealOrder(models.Model):
meal = models.CharField(max_length=8, choices=CHOICES)
J'ai une forme:
from django.forms import ModelForm
class MealOrderForm(ModelForm):
class Meta:
model = MealOrder
Et je veux utiliser formtools.preview. Le modèle par défaut imprime la version courte du choix (« e » au lieu des « œufs fabuleux »), becuase il utilise
{% for field in form %}
<tr>
<th>{{ field.label }}:</th>
<td>{{ field.data }}</td>
</tr>
{% endfor %}.
Je voudrais un modèle aussi général que mentionné, mais l'impression « œufs fabuleux ' au lieu.
[comme je l'avais des doutes où est la vraie question, je en gras pour nous tous :)]
Je sais comment obtenir la version verbeux d'un choix d'une manière qui lui-même est laid:
{{ form.meal.field.choices.1.1 }}
la vraie douleur est que je dois obtenir le choix sélectionné, et la seule façon de venir à mon esprit Itère choix et le contrôle {% ifequals currentChoice.0 choiceField.data %}
, ce qui est encore plus laid.
Cela peut-il être fait facilement? Ou a-t-il besoin d'une programmation de template-tag? Cela ne devrait-il pas déjà être disponible dans django?
oui, je sais. Cependant, ce n'est pas aussi général (universel), sauf si vous connaissez un moyen d'itérer dans un modèle sur toutes les méthodes get_FOO_display d'un objet modèle :) Je suis un peu trop paresseux pour écrire des modèles non génériques;) les docs disent que c'est la méthode d'une instance de modèle. Par conséquent, il doit s'agir d'un formulaire modèle lié à un objet existant, ce qui n'est pas le cas et n'est pas général. –
J'oublie toujours celui-ci – Sevenearths
Notez que cette utilisation n'est pas limitée aux vues, get_FOO_display() est une méthode sur l'objet modèle lui-même, donc vous pouvez l'utiliser aussi dans le code du modèle! Par exemple, dans __unicode __() c'est très pratique – Bogatyr