我用get_FOO_display无济于事,这就是我所拥有的(我修剪了一些东西,使其更容易阅读,就像自定义def保存:
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
我想要的输出:
等级小学
Piplevel Diamond
虚荣大使
我尝试用{{field.get.level.display}}和{{field.get_piplevel_display}}替换{{field}}和for循环,但它们只返回了空白。当这些显示时,它们是一个下拉菜单,DO有所有可用的命名选项 - 也就是说,当我点击“15”时,我会得到一个选项列表,即:
Piplevel 15 点击(当前选择的是15)(选项值=“1”&gt;常规(/选项&gt;(选项值=“2”&gt;白金(/选项&gt;等)(不是HTML代码)
我是否在Django中遗漏了一些简单的功能?
编辑:这是我目前的GET输出。
<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.get_piplevel_display}}或{{field.choice.get_piplevel_display}}替换{{field}},我会将其作为输出:
<tr class="even">
<th>
<label for="id_piplevel">Piplevel</label>
</th>
<td class="updatable">
<div class="field"> </div>
</td>
</tr>
似乎这是每个人都想要的东西,所以我希望在Django中有一些争论只是......解决了这个问题,但我找不到它。抱歉让一个简单的问题看起来如此复杂 - 这应该是一个简单的问题,不是吗?
答案 0 :(得分:3)
对于每个有选择的字段,Django会自动在模型上添加get_FOO_display()
方法(docs)。所有这个方法都是为字段取已存储的值,在提供的字段选项中查找它,并返回该值的“显示”文本。
此字段或表单上的不可用。您必须引用现有对象或表单实例(例如form.instance
)。
同样,我不确定你要完成什么,因为<select>
已经填充,以便它们显示文本而不是基础值。即使您正在编辑现有对象,<select>
仍将显示当前设置值的显示文本。
答案 1 :(得分:1)
我真的没有看到你想要做什么,但是:
{{field.get.level.display}}
应该是
{{field.choices.get_level_display}}
# or
{{field.get_level_display}}