2016-01-21 222 views
0

我有一个非常简单的选择场在我的模型:get_FOO_display返回空字符串

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')

任何帮助表示赞赏。

+1

'm'对'my_field'有效吗? – Rohan

+1

模板中显示{{m.my_field}}是什么?通过使用组成的变量名称,您可能会隐藏问题。 – Alasdair

+0

'm.my_field'返回正确的整数值。我只注意到我正在使用values_list()可能是问题。我会更新我的问题。 – Ali

回答

1

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

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

所以你俩只选择从数据库中需要的,并且仍然能够使用模型的方法等领域。 More on only in the docs

+0

谢谢亚历克斯,完美无缺的作品。 – Ali

0

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

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

+0

感谢Daniel的回复。我使用的是values_list,因为模型有很多字段,我只需要其中的8个左右。我会看看我可以使用values_list或类似的东西来做什么。 – Ali

+1

正如Alex所说,你可以使用'only',它返回一个实际的模型对象,但不会填充所有的字段。 –

+0

哈哈我不得不阅读你的评论,看看他的:P。非常感谢! – Ali