Django:如何根据实际值和选择访问模板中ChoiceField的显示值?

时间:2011-12-08 01:20:11

标签: django django-forms django-templates

我有一个绑定形式的ChoiceField,其选择是:

[('all', 'All users'), ('group', 'Selected groups'), ('none', 'None')]

在模板中,访问其绑定值(要存储的实际值;每个元组的第一个元素)和选项都没有问题。有了这些信息,我知道我应该能够访问显示值,或每个元组的第二个元素。但是我怎么能在模板中做到这一点?感谢。

7 个答案:

答案 0 :(得分:12)

我怀疑没有自定义模板标签或过滤器就可以完成。 自定义模板过滤器可能看起来:

@register.filter
def selected_choice(form, field_name):
    return dict(form.fields[field_name].choices)[form.data[field_name]]

答案 1 :(得分:4)

使用get_FOO_display property

**编辑**

Oups!阅读以下评论后,快速编辑此答案。

bound_form['field'].value()

应该有效according to this changeset

答案 2 :(得分:1)

在型号中

STATUS_CHOICES = (
    (0, _("Draft")),
    (1, _("Started")),
    (2, _("Stopped")),
)

class Study(models.Model):

    status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, default=0)

    @property
    def get_status(self):
        return STATUS_CHOICES[self.status][1]

在您的模板中(您已将模型实例作为对象传递)

{{ object.get_status }}

答案 3 :(得分:0)

点击此链接 - https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display

您可以使用此函数返回显示名称 - ObjectName.get_FieldName_display()

将ObjectName替换为您的类名和FieldName,其字段需要获取显示名称。

答案 4 :(得分:0)

我有一个使用FormView基于类的视图的联系表单。联系表单包含一些ChoiceField字段。我没有将提交内容存储在数据库中;只需通过电子邮件发送给网站所有者。这就是我最终做的事情:

def form_valid(self, form):
    for field in form.fields:
        if hasattr(form[field].field, 'choices'):
            form.cleaned_data[field + '_value'] = dict(form[field].field.choices)[form.cleaned_data[field]]

    ...

答案 5 :(得分:0)

如果您在表单模板中使用{{ form.instance.field }},则应显示所选的选择显示名称

答案 6 :(得分:0)

由于使用了'union'方法而无法使用get_FOO_display(因为它返回字典,而不是对象列表)。我写了一个快速模板标签来转换字段显示。

@register.simple_tag
def tag_get_display(obj):
    """
        Returns the display of the field when unable to access get_foo_display.

    """
    return CHOICES_LIST[obj][1]