gpt4 book ai didi

django - 从外键中选择单个字段

转载 作者:行者123 更新时间:2023-12-04 02:18:01 25 4
gpt4 key购买 nike

所以我有一个非常简单(简化)的模型

class MyObject(models.Model):
owning_user = models.ForeignKey(User, null=True)

现在在我的一个模板中,我试图遍历这些对象的列表以确定是否应该显示类似于此的内容

{% 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 多次并且每个查询需要 2 毫秒,所以执行这个需要 2 秒 - 当我关心的只是 id...

我是否可以只执行查询以从 owning_user 获取 id 而不必查询所有字段?

请注意,我在这里非常努力地避免进行原始查询

最佳答案

如果您使用 my_object.owning_user_id 而不是 my_object.owning_user,那么 Django 将使用 id 而不是查找用户。

在这种情况下,你只需要id,但如果你需要其他用户属性,你可以使用select_related .在 View 中,您将执行以下操作:

foo.my_object_set.select_related('user')

在模板中,您没有那么多控制权,因为您无法传递参数。

{{ foo.my_object_set.select_related }}

关于django - 从外键中选择单个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32869856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com