Django:User.objects.profile.all()和User.objects.get_profile()之间的区别?

时间:2011-03-10 00:06:13

标签: django django-models

我为User FK设置了一个UserProfile模型,其中related_name ='profile'。

假设我有一个User obj,user1。如果我想从user1获取UserProfile对象,那么在db命中和效率方面使用user1.profile.all()和user1.get_profile()之间的区别是什么?

1 个答案:

答案 0 :(得分:7)

这两个命令在Django中都没有。但是,如果您修复语法问题,它们会完全不同。

如果您想同时获取用户实例及其关联的配置文件,只需一次数据库命中,您就可以使用:

user = User.objects.select_related('profile').get(pk=my_pk_value)

现在,您可以通过执行useruser.profile访问配置文件,并且不会产生另一个数据库命中。如果你错过了select_related,你可以做同样的事情,但它会引发另一个数据库命中。

如果您已经拥有一个用户对象user,那么您将执行user.get_profile(),这将获得实际的Profile对象 - 另一个db命中。