我的模型中有一个非常简单的选择字段:
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')
感谢任何帮助。
答案 0 :(得分:1)
要使用模型的方法,您的查询集应返回模型,而不是普通值。我建议您将查询更改为:
MyModel.objects.only('my_field', 'others')
这样,您只需从数据库中选择所需的字段,并且仍然可以使用模型的方法。 More on only
in the docs
答案 1 :(得分:0)
values_list
的意思是,顾名思义,它返回一个值列表,而不是模型实例。所以你不能使用任何模型方法。
除非你有充分的理由,否则你应该总是将实际模型传递给你的模板;它允许您在模型类中存储尽可能多的逻辑,并直接从模板中调用这些方法。