我有一个非常简单的(简化的)模型
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,而不必查询所有字段?
注意,我在尽力避免进行原始查询。