我的Django模型上有一个自定义属性,它返回一个Person的全名:
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def _get_full_name(self):
return "%s %s" % (self.first_name, self.last_name)
full_name = property(_get_full_name)
当我创建查询时,我想引用该属性。例如:
people = Person.objects.all().values_list('full_name')
不幸的是,Django会产生以下FieldError:
FieldError:无法将关键字“full_name”解析为字段
长话短说,是否可以通过values_list()方法访问自定义属性?如果没有,是否有人就如何最好地解决这个问题提出任何建议?
答案 0 :(得分:16)
全名不是django模型中的字段,不可能。 你可以使用列表推导
[person.fullname for person in Person.objects.all() ]
答案 1 :(得分:15)
values_list
只能用于直接从数据库中检索的字段。正如zaca所说,你需要对实际查询集进行列表理解:
[person.fullname for person in Person.objects.all()]
请勿过度使用values_list
。它只是一种限制数据库查询的方法,因为当你知道时,你只需要那些特定的字段。对于几乎所有用途,获取标准查询集都足够有效。
答案 2 :(得分:0)
全名不是Django模型中的字段,因此您可以使用如下注释:
people = Person.objects.annotate(
fullname=Concat(
'first_name',
Value(' '),
'last_name'),
).values_list(
'full_name',
)