get_FOO_display返回空字符串

时间:2016-01-21 11:00:52

标签: django django-templates

我的模型中有一个非常简单的选择字段:

MY_TYPES = (
    (1, _("Type 1")),
    (2, _("Type 2")),
    (3, _("Type 3"))
)
my_field = models.IntegerField(choices=MY_TYPES, default=1)

_导入为from django.utils.translation import ugettext_lazy as _

我在manage.py shell_plus时得到了正确的结果。例如:

m = MyModel.objects.get(pk=1)
m.get_my_field_display() # returns the value correctly

但是,它在我的模板中返回一个空字符串:{{ m.get_my_field_display }}

编辑:我忘了提到我在我的观点中使用values_list()MyModel.objects.values_list('my_field', 'others')

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

要使用模型的方法,您的查询集应返回模型,而不是普通值。我建议您将查询更改为:

MyModel.objects.only('my_field', 'others')

这样,您只需从数据库中选择所需的字段,并且仍然可以使用模型的方法。 More on only in the docs

答案 1 :(得分:0)

values_list的意思是,顾名思义,它返回一个值列表,而不是模型实例。所以你不能使用任何模型方法。

除非你有充分的理由,否则你应该总是将实际模型传递给你的模板;它允许您在模型类中存储尽可能多的逻辑,并直接从模板中调用这些方法。