4

我有一个ModelChoiceField和一个ChoiceField,我需要为(而不是“值”)提取“显示名称”。

例如,ModelChoiceField表单的 a 呈现以下输出:

<select name="amodelfield" id="id_amodelfield">
<option value="">---------</option>
<option selected="selected" value="1">ABC</option>
<option value="2">DEF</option>
</select>

我希望能够只渲染“ ABC ”,因为它被选中。如果我按照文档{{ field.value }}中所说的那样做,我会得到价值而不是我想要的。我也有一个我想要相同行为的 ChoiceField。1ABC

有没有一种简单的方法可以在没有子类化和小部件的情况下做到ModelChoiceFieldChoiceField一点Select

编辑:Model.get_FOO_display()在这种情况下不起作用

4

2 回答 2

2

使用 {{ get_fieldname_display }}。

https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display

于 2013-11-13T17:59:05.313 回答
1

从@Odif Yltsaeb 提供的链接中,我可以使用修改答案中的代码来满足我的需求。这是供参考的代码:

def choiceval(boundfield):
    """
    Get literal value from field's choices. Empty value is returned if value is 
    not selected or invalid.

    Important: choices values must be unicode strings.

        choices=[(u'1', 'One'), (u'2', 'Two')

    Modified from:
    https://stackoverflow.com/a/5109986/2891365
    Originally found from:
    https://stackoverflow.com/questions/19960943/django-rendering-display-value-of-a-modelchoicefield-and-choicefield-in-a-templ
    """
    # Explicitly check if boundfield.data is not None. This allows values such as python "False"
    value = boundfield.data if boundfield.data is not None else boundfield.form.initial.get(boundfield.name)
    if value is None:
        return u''
    if not hasattr(boundfield.field, 'choices'):
        return value
    return dict(boundfield.field.choices).get(value, u'')
于 2013-11-13T22:47:49.340 回答