Django 从外键中选择单个字段
所以我有一个非常简单(简化)的模型 现在,在我的一个模板中,我试图迭代这些对象的列表,以确定是否应该显示类似于此的内容Django 从外键中选择单个字段,django,Django,所以我有一个非常简单(简化)的模型 现在,在我的一个模板中,我试图迭代这些对象的列表,以确定是否应该显示类似于此的内容 {% for my_object in foo.my_object_set %} {% if my_object.owning_user.id == user.id %} Show Me! {% endif %} 这很好,但我发现查询 my_object.owning_user.id 在获取在django调试工具栏中验证的id和检查连接查询
{% for my_object in foo.my_object_set %}
{% if my_object.owning_user.id == user.id %}
Show Me!
{% endif %}
这很好,但我发现查询
my_object.owning_user.id
在获取在django调试工具栏中验证的id和检查连接查询之前,从拥有用户返回每个字段
# django-debug-toolbar states this is repeated multiple times
SELECT ••• FROM "auth_user" WHERE "auth_user"."id" = 1
# The following test code also confirms this
from django.db import connection
conn = connection
bearing_type.owning_user.id
print conn.queries[-1]
现在,由于这个查询重复了1000多次,每个查询需要2ms,所以执行这个查询只需要2秒钟,而我所关心的只是id
我是否可以执行一个查询,只从拥有用户那里获取id,而不必查询所有字段
注意,如果使用
我的\u对象,我在这里非常努力地避免进行原始查询。拥有\u用户\u id而不是我的\u对象。拥有\u用户
,Django将使用id而不是查找用户
在这种情况下,您只需要id,但如果需要其他用户属性,则可以使用。在视图中,您将执行以下操作:
foo.my_object_set.select_related('user')
在模板中,您没有那么多的控制权,因为您不能传递参数
{{ foo.my_object_set.select_related }}
哦,哇,有些日子我只是喜欢django。。。谢谢关于你的补充,我知道与select_相关,但被我删除的东西的模板方面所削弱,我也不认为我真的需要它,因为我不太需要逻辑:)
{{ foo.my_object_set.select_related }}