我使用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.
答案 0 :(得分:0)
好的,我终于弄清楚为什么会这样。
在shell中直接运行UserProfile.objects.all()
时,结果为“打印”,我的UserProfile的__unicode__
方法使用触发其他请求的用户self.user
。