过滤对象中的values_list
,在django视图中提供解决方案确实对我有很大帮助。
我的代码如下所示,这个代码有效:
values_list_ac = realdata.objects.filter(product = '1').values_list('company', 'brand', 'created_by__username')
虽然用户名是该字段存在于当前realdata模型之外的不同模型中。
但是下面的代码不起作用,因为我想显示ac_type
的值,它基于同一realdata
模型中的选项字段。 (我尝试使用在模板中工作的相同解决方案来解决它):
values_list_ac = realdata.objects.filter(product = '1').values_list('company', 'brand', 'created_by__username', 'get_ac_type_display')
是否有get_ac_type_display
以外的解决方案来显示字段值?
我非常感谢一些光明。
编辑: 这是我的模特:
class realdata(models.Model):
company = models.CharField(max_length=60, verbose_name="Company")
brand = models.CharField(_('brand'), max_length=60)
model = models.CharField(max_length=60)
type_choices = (
(u'1', u'Inverter'),
(u'2', u'Non-Inverter'),
)
ac_type = models.CharField(max_length=60, verbose_name="Type", choices=type_choices)
created_by = models.ForeignKey(User)
非常感谢!
答案 0 :(得分:2)
values_list
函数只会获取存储在数据库中的值。在模型的字段上定义选项时,它将存储元组的第一个值,因此这将是您要检索的内容。
这意味着您必须查看选择元组以确定项目的显示值。 get_foo_display
的目的是为您提供这个人类可读的值,但它需要一个模型实例来处理。
因此,自己解决此问题的解决方案是检查选择,并相应地转换数据。以下应该能够做到这一点:
result = []
for p in realdata.objects.filter(product='1').values_list(
'company', 'brand', 'created_by__username', 'ac_type'):
choice = {k: v for k, v in realdata.type_choices}[p[-1]]
result.append(list(p[:-1]) + [choice])
result
变量将包含转换后的列表。需要新变量,因为values_list
函数将返回元组列表;后者是不可改变的。另外,请注意将您想要解决的价值作为values_list
来电中的最后一项,或调整上述内容以匹配。