Django get_FOO_显示返回空字符串

Django get_FOO_显示返回空字符串,django,django-templates,Django,Django Templates,我的模型中有一个非常简单的选项字段: MY_TYPES = ( (1, _("Type 1")), (2, _("Type 2")), (3, _("Type 3")) ) my_field = models.IntegerField(choices=MY_TYPES, default=1) \u作为从django.utils.translation导入ugettext\u lazy as导入 当我manage.py shell\u plus时,我得到了正确的结果。例如

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

MY_TYPES = (
    (1, _("Type 1")),
    (2, _("Type 2")),
    (3, _("Type 3"))
)
my_field = models.IntegerField(choices=MY_TYPES, default=1)
\u
作为
从django.utils.translation导入ugettext\u lazy as导入

当我
manage.py shell\u plus
时,我得到了正确的结果。例如:

m = MyModel.objects.get(pk=1)
m.get_my_field_display() # returns the value correctly
但是,它在我的模板中返回一个空字符串:
{{m.get\u my\u field\u display}

编辑:我忘了提到我正在使用视图中的
values\u list()
MyModel.objects.values\u list('my\u field','others')


感谢您的帮助

values\u list
的要点是,顾名思义,它返回一个值列表,而不是模型实例。因此,您不能使用任何模型方法


除非你有很好的理由,否则你应该总是把实际的模型传递给你的模板;它允许您在模型类中存储所需的逻辑,并直接从模板调用这些方法。

值列表的要点是,顾名思义,它返回值列表,而不是模型实例。因此,您不能使用任何模型方法


除非你有很好的理由,否则你应该总是把实际的模型传递给你的模板;它允许您在模型类中存储所需的逻辑,并直接从模板调用这些方法。

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

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

这样,您就可以只从数据库中选择所需的字段,并且仍然能够使用模型的方法

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

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

这样,您就可以只从数据库中选择所需的字段,并且仍然能够使用模型的方法

m
是否对
my_字段
具有有效值?模板中显示的
{{m.my_字段}
是什么?通过使用虚构的变量名,可以隐藏问题。
m.my_field
返回正确的整数值。我刚刚注意到我使用的值可能是问题所在。我将更新我的问题。请使用
MyModel.objects。仅('my_field','others')
@AlexMorozov。您可以发布我可以接受的答案吗?我相信这对任何有相同问题的人都是有帮助的,我不知道
只是
m
是否对
my_字段
有有效值?
{{m.my_字段}}
在模板中显示什么?通过使用虚构的变量名,可以隐藏问题。
m.my_field
返回正确的整数值。我刚刚注意到我使用的值可能是问题所在。我将更新我的问题。请使用
MyModel.objects。仅('my_field','others')
@AlexMorozov。您可以发布我可以接受的答案吗?我相信这对任何有相同问题的人都有帮助,我不知道只有
。谢谢回复Daniel。我使用values_list是因为模型有很多字段,我只需要8个字段。我会看看我能用values\u list或类似的东西做些什么。正如Alex所建议的,你可以只使用
,它返回一个实际的模型对象,但不会填充所有的字段。谢谢你的回复。我使用values_list是因为模型有很多字段,我只需要8个字段。我将看看我可以使用values\u list或类似的东西做些什么。正如Alex所建议的,您可以只使用
,它返回一个实际的模型对象,但不填充所有字段。