如何限制Django查询返回的列?

phi*_*o20 62 django orm

这似乎很简单,但所有Django查询似乎都是'SELECT*'

如何构建仅返回字段子集的查询?

Dan*_*man 76

在Django 1.1及更高版本中,您可以使用defer('col1', 'col2')从查询中排除列,或only('col1', 'col2')仅获取一组特定的列.请参阅文档.

values 做一些稍微不同的事情 - 它只获取你指定的列,但它返回一个字典列表而不是一组模型实例.

  • @Daniel,你知道为什么文档说明要避免这些方法吗?它说它们应该是最后的手段,其他方法应该先用尽. (6认同)
  • 还有values_list()返回元组而不是字典(比如values()).Only()和Defer()返回实际的模型对象,但缺少将按需加载的数据(这非常昂贵,因此请确保您知道自己在做什么).所以每个都有不同的用例. (3认同)

Ian*_*and 31

附加.values("column1", "column2", ...)到您的查询

  • 注意:如果使用`.get()`代替`.filter()`来获取特定对象,并想要检索特定列,则需要确保`.values('field1',...) `是在`.get()`方法之前指定的.如果它是之后,它会生成一个错误,因为它获取了对象,然后尝试在`model instance`而不是`objects`属性上运行`.values()`方法. (19认同)
  • 这个答案比公认的答案要好得多(因为它实际上回答了问题。在没有代码示例的情况下说“查看文档”或“使用这个或那个”并不是真正的答案)。我也已经在使用 QuerySet.values(),这使得它变得更加容易。谢谢! (2认同)