Mam model:Django szablony: verbose wersja wyboru
from django.db import models
CHOICES = (
('s', 'Glorious spam'),
('e', 'Fabulous eggs'),
)
class MealOrder(models.Model):
meal = models.CharField(max_length=8, choices=CHOICES)
mam postać:
from django.forms import ModelForm
class MealOrderForm(ModelForm):
class Meta:
model = MealOrder
I chcę używać formtools.preview. Domyślny szablon wypisuje krótką wersję wyboru („e” zamiast „Wspaniali jaj”), ponieważ posiadał wykorzystuje
{% for field in form %}
<tr>
<th>{{ field.label }}:</th>
<td>{{ field.data }}</td>
</tr>
{% endfor %}.
Chciałbym szablon jako ogólne, jak wspomniano, ale drukowanie „Fabulous jaja ' zamiast.
[jak miałem wątpliwości, gdzie jest prawdziwe pytanie, mam pogrubione to dla nas wszystkich :)]
wiem jak uzyskać opisowy wersję wyboru w sposób, który sam jest brzydki:
{{ form.meal.field.choices.1.1 }}
prawdziwy ból jest potrzebne, aby uzyskać wybrany wyboru, a jedynym sposobem, zbliża się do mojego umysłu jest iteracja wyborów i sprawdzania {% ifequals currentChoice.0 choiceField.data %}
, który jest jeszcze brzydsze.
Czy można to łatwo zrobić? Lub potrzebuje programowania szablonów? Czy nie powinno to być już dostępne w django?
Tak, wiem. Nie jest to jednak ogólna (uniwersalna) - chyba, że znasz sposób na iterowanie w szablonie wszystkich metod get_FOO_display obiektu modelu :) Jestem zbyt leniwy, aby pisać nie generyczne szablony;) Co więcej, Dokumenty mówią, że jest to metoda modelu. Dlatego musiałaby to być forma modelu powiązana z istniejącym obiektem, co nie ma miejsca, a także nie jest ogólna. –
Zawsze o tym zapominam – Sevenearths
Pamiętaj, że to użycie nie jest ograniczone do widoków, get_FOO_display() to metoda na samym obiekcie modelu, dzięki czemu możesz go również użyć w kodzie modelu! Na przykład, w __unicode __() jest bardzo przydatny – Bogatyr