django:外键触发与返回的对象一样多的查询

时间:2014-04-17 22:23:00

标签: django django-models

我使用OneToOne rel定义了UserProfile用户。

基本上:

class UserProfile(models.Model):

    user = models.OneToOneField(User, related_name='profile', unique=True)

当我查询UserProfile时,除了主查询之外,我很惊讶地看到每个用户的查询。

例如,我有4个用户/ userprofiles,在shell中,我这样做:

from django.db import connection
connection.queries = [] # reset

UserProfile.objects.all()
len(connection.queries) # 7 queries

查看查询,第一个查询按预期在UserProfile表上,但随后在User表上有6个查询,每个用户一个。这是正常的吗?我认为FK在被访问时被查询...

SELECT "test_userprofile"."id", "test_userprofile"."created", "test_userprofile"."modified", "test_userprofile"."time_zone", "test_userprofile"."user_id"
FROM "test_userprofile" LIMIT 21

SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", 
       "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" 
FROM "auth_user" 
WHERE "auth_user"."id" = 1

SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", 
       "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" 
FROM "auth_user" 
WHERE "auth_user"."id" = 2

etc.

1 个答案:

答案 0 :(得分:0)

好的,我终于弄清楚为什么会这样。 在shell中直接运行UserProfile.objects.all()时,结果为“打印”,我的UserProfile的__unicode__方法使用触发其他请求的用户self.user