Я возился с get_FOO_display безрезультатно, вот что у меня получилось (я кое-что обрезал, чтобы его было легче читать, например, пользовательское сохранение по умолчанию:
class Profile(models.Model):
LEVEL_CHOICES = (
(1, 'Primary'),
(2, 'Secondary'),
(3, 'Tertiary'),
)
level = models.IntegerField( verbose_name = 'Level', blank=True, null=True, choices=LEVEL_CHOICES)
piplevel = models.ForeignKey(AccessLevel, related_name='profiles')
vanity = models.ForeignKey(AccessLevel, related_name='vanity')
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
# HTML CODE from Template below
<tbody>
{% for field in user_form %}
<tr>
<th>{{ field.label_tag }}</th>
<td class="updatable">
<div class="field">
{{ field }}
</div>
{% if field.errors %}{{ field.errors }}{% endif %}
</td>
</tr>
{% endfor %}
{% for field in profile_form %}
<tr>
<th>{{ field.label_tag }}</th>
<td class="updatable">
<div class="field">
{{ field }}
</div>
{% if field.errors %}{{ field.errors }}{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
На выходе я получаю:
Уровень 1
Piplevel 15
Тщеславие 20
Вывод, который я хочу:
Уровень Primary
Piplevel Diamond
Посол тщеславия
Я попытался заменить цикл {{field}} и for на {{field.get.level.display}} и {{field.get_piplevel_display}}, но они просто вернули пробелы. Когда они отображаются, они представляют собой раскрывающееся меню и имеют все доступные именованные опции, то есть, когда я нажимаю «15», я получаю список опций, т. Е .:
.
Piplevel 15 click (текущее выбрано 15) (значение опции = "1"> Обычное (/ option> (значение опции = "2"> Platinum (/ option> и т. Д. (Не HTML-код) )
Мне не хватает какой-то простой функции в Django для этого?
Редактировать: Вот вывод HTML, который я получаю в настоящее время.
<tr class="even">
<th>
<label for="id_piplevel">Piplevel</label>
</th>
<td class="updatable" title="Click to modify">
<div class="field" style="display: none;">
<select id="id_piplevel" name="piplevel">
<option value="">---------</option>
<option value="1">Regular</option>
<option value="2">Platinum</option>
...
<option selected="selected" value="7">Emerald</option>
</select>
</div>
<div>7</div>
</td>
</tr>
Вот вывод HTML, который я ХОЧУ, в идеале:
<tr class="even">
<th>
<label for="id_piplevel">Piplevel</label>
</th>
<td class="updatable" title="Click to modify">
<div class="field" style="display: none;">
<select id="id_piplevel" name="piplevel">
<option value="">---------</option>
<option value="1">Regular</option>
<option value="2">Platinum</option>
...
<option selected="selected" value="7">Emerald</option>
</select>
</div>
<div>Emerald</div>
</td>
</tr>
И, если я заменю {{field}} на {{field.get_piplevel_display}} или {{field.choice.get_piplevel_display}}, я получу это в качестве вывода:
<tr class="even">
<th>
<label for="id_piplevel">Piplevel</label>
</th>
<td class="updatable">
<div class="field"> </div>
</td>
</tr>
Кажется, что это то, что все хотят, и поэтому я ожидал, что в Django будет какой-то аргумент, который просто ... исправит это, но я не могу его найти. Извините за то, что простой вопрос казался таким сложным - это должен быть простой вопрос, не так ли?