Django 如何显示选项名称而不是选项值?
我在get_FOO_display上翻来翻去都没用,下面是我得到的(我修剪了一些东西,使它更容易阅读,比如自定义的def保存:Django 如何显示选项名称而不是选项值?,django,django-templates,django-forms,Django,Django Templates,Django Forms,我在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=L
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>
类配置文件(models.Model):
级别_选项=(
(1,“主要”),
(二)"次",,
(3,'第三'),
)
level=models.IntegerField(verbose\u name='level',blank=True,null=True,choices=level\u choices)
piplevel=models.ForeignKey(AccessLevel,相关的\u name='profiles')
虚荣=模型。外键(AccessLevel,相关的_name='Vanite')
类ProfileForm(forms.ModelForm):
类元:
模型=外形
#下面模板中的HTML代码
{user_form%}中字段的%
{{field.label_tag}
{{field}}
{%if-field.errors%}{{field.errors}{%endif%}
{%endfor%}
{%用于配置文件中的字段\形式%}
{{field.label_tag}
{{field}}
{%if-field.errors%}{{field.errors}{%endif%}
{%endfor%}
我得到的输出:
一级第15级
虚荣20 我想要的输出: 初级水平
皮普级钻石
虚荣大使 我试着用{field.get.level.display}和{{field.get.get\u pipflevel\u display}替换{{field}}和for循环,但是它们只是返回空白。当这些显示时,它们是一个下拉菜单,并且所有命名的选项都可用-也就是说,当我点击“15”时,我确实得到一个选项列表,即: Piplevel 15单击(当前选择的是15)(option value=“1”>常规(/option>(option value=“2”>白金(/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>
皮普莱尔
---------
有规律的
铂金
...
翡翠的
7.
理想情况下,以下是我想要的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\u piplevel\u display}或{{field.choice.get\u piplevel\u display},我会得到以下输出:
<tr class="even">
<th>
<label for="id_piplevel">Piplevel</label>
</th>
<td class="updatable">
<div class="field"> </div>
</td>
</tr>
皮普莱尔
这似乎是每个人都想要的东西,所以我希望Django中会有一些论点,只是…解决了这个问题,但我找不到。很抱歉让一个简单的问题变得如此复杂-这应该是一个简单的问题,不是吗?我真的不明白你想做什么,但是:
{{field.get.level.display}}
应该是
{{field.choices.get_level_display}}
# or
{{field.get_level_display}}
对于每个具有选项的字段,Django会自动在模型()上添加一个
get\u FOO\u display()
方法。该方法所做的只是获取字段中已存储的值,在提供的字段选项中查找该值,并返回该值的“display”文本
此方法在字段或表单上不可用。您必须引用现有对象或表单实例(例如form.instance
)
同样,我也不确定您想要完成什么,因为
已经填充,因此它们显示的是文本而不是基础值。即使您正在编辑现有对象,
仍将显示当前设置值的显示文本。这没有多大意义。这是templat用于显示表单的e代码,并且您已经声明字段使用selects正确显示。“输出”在哪里这应该不起作用吧?抱歉,问题是此表显示的是数值。我希望该表显示的是名称。我不明白为什么下拉菜单中有所有选项名称,但“默认显示”是相对无用的整数。谢谢尝试!这不起作用;这两个选项都给了我空白表。M如果我包含HTML输出可能会有帮助吗?如果你提供完整的模板代码,会有更大的帮助。从你提供的部分snipet中获取你想要的输出或你声称得到的输出实际上是不可能的。我编辑了原始帖子以包含完整的模板代码。我认为下面还有其他一些根本问题我的整个项目都很忙-因为似乎没有其他人“理解”我的问题。不过,感谢您的尝试!所以…您是说我应该修改.py文件以包含以下内容:,