首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以使用Django的QuerySet.values_list引用属性?

是否可以使用Django的QuerySet.values_list引用属性?
EN

Stack Overflow用户
提问于 2010-01-26 23:15:38
回答 3查看 26.9K关注 0票数 23

我在Django模型上有一个自定义属性,它返回一个人的全名:

代码语言:javascript
运行
复制
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)

创建查询时,我希望引用该属性。例如:

代码语言:javascript
运行
复制
people = Person.objects.all().values_list('full_name')

不幸的是,Django产生了以下FieldError:

FieldError:无法将关键字“full_name”解析为字段

长话短说,是否可以通过values_list()方法访问自定义属性?如果没有,是否有人对如何最好地解决这个问题有任何建议?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-26 23:45:15

全名不是django模型中的字段,它是不可能的。你可以使用列表理解

代码语言:javascript
运行
复制
[person.fullname for person in Person.objects.all() ] 
票数 24
EN

Stack Overflow用户

发布于 2010-01-27 09:10:55

values_list只能在直接从数据库检索的字段上工作。正如zaca所指出的,您需要对实际的queryset进行列表理解:

代码语言:javascript
运行
复制
[person.fullname for person in Person.objects.all()]

不要过度使用values_list.它只是作为限制db查询的一种手段,因为当您知道您只需要那些特定的字段时。对于几乎所有的用途,获得标准的查询集是足够有效的。

票数 21
EN

Stack Overflow用户

发布于 2019-11-28 08:49:52

全名不是Django模型中的字段,因此您可以使用注释如下:

代码语言:javascript
运行
复制
people = Person.objects.annotate(
    full_name=Concat(
        'first_name', 
        Value(' '), 
        'last_name'
    )
).values_list('full_name')
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2143438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档