Django Queryset only()和defer()

时间:2013-03-08 01:01:23

标签: django django-models

在现实世界中,人们多久使用defer()only()等QuerySet方法? 我想我真的很了解他们,直到最近我才发现这些方法。

请参阅此处的文档。 https://docs.djangoproject.com/en/dev/ref/models/querysets/

2 个答案:

答案 0 :(得分:19)

这些方法主要用于优化应用程序的性能。

一般来说,如果您没有遇到性能问题,则无需进行优化。如果您不需要优化,则不需要这些功能。这是一个包含许多高级QuerySet功能的案例,例如select_relatedprefetch_related

至于“它们在现实世界中的使用频率”,这实际上并不是一个可回答的问题。它们在需要时使用。如果您不需要它们,请不要使用它们。

答案 1 :(得分:7)

defer()only()彼此有些相反。两者都收到field_names的列表。 defer()将不会查询列,列表,作为参数传递给它。与此相反,only()将仅查询列,将其作为参数传递给它。

两者都用于场景中,

  • 您希望通过避免不必要的列提取进行优化

  • 您正在python代码中实现视图。 Eg.Admin必须 显示X没有。 cols,用户必须显示Y否。观众,访客 必须显示z没有cols。