2016-01-21 141 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