Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 从外键中选择单个字段_Django - Fatal编程技术网

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 }}