Django获取执行QuerySet的不必要字段

时间:2012-07-08 11:54:30

标签: django optimization django-queryset

此QuerySet(假设Model模型有12个字段):

objects = Model.objects.filter(...)

这个模板:

{% for object in object %}
<a href='{{ object.get_absolut_url }}'>Foo: {{ object.bar }}</a>
{% endfor %}

执行SQL查询,获取不必要的字段(每12个字段+关系)。我希望Django只获得'bar'字段。我怎样才能做到这一点?

顺便提一下我知道values()方法,但是当它返回dict时,我无法调用Modelget_absolute_url()方法。

1 个答案:

答案 0 :(得分:1)

您只想使用():

objects = Model.objects.select_related()。only(“bar”)。filter(...)

请记住,如果你限制过多的数据,然后以其他方式使用对象,你实际上可以让ORM执行额外的查询,所以一定要使用像django-debug-toolbar这样的东西来确保你没有删除这些不必要的字段只会导致许多不必要的查询,这是一个更糟糕的情况。

仅供您参考,如果您想在另一个方向考虑它,也可以使用defer()列出您不想加载的字段。