【发布时间】:2011-01-27 18:49:56
【问题描述】:
这看起来很简单,但所有 Django 查询似乎都是 'SELECT *'
如何构建只返回字段子集的查询?
【问题讨论】:
这看起来很简单,但所有 Django 查询似乎都是 'SELECT *'
如何构建只返回字段子集的查询?
【问题讨论】:
将.values("column1", "column2", ...) 附加到您的查询中
【讨论】:
.get() 而不是.filter() 来获取特定对象,并且想要检索特定列,则需要确保在.get() 之前指定.values('field1',...)方法。如果是之后,它会生成错误,因为它获取对象,然后尝试在 model instance 而不是 objects 属性上运行 .values() 方法。
从 Django 1.1 开始,您可以使用 defer('col1', 'col2') 从查询中排除列,或使用 only('col1', 'col2') 仅获取特定的一组列。见the documentation。
values 稍有不同 - 它只获取您指定的列,但它返回一个字典列表而不是一组模型实例。
【讨论】:
qs=Employee.objects.all() 和qs[0].pk 结果是实例但是我做qs2 = Employee.objects.all().filter(pk=1).only(id) 然后qs2[0].id 它花了很长时间。 ..
defer 和 only 的描述,这将是一个很好的答案。从单个堆栈溢出页面获得答案优于访问额外的文档页面。伊恩在下面的答案中做得很好。