我为User FK设置了一个UserProfile模型,其中related_name ='profile'。
假设我有一个User obj,user1。如果我想从user1获取UserProfile对象,那么在db命中和效率方面使用user1.profile.all()和user1.get_profile()之间的区别是什么?
答案 0 :(得分:7)
这两个命令在Django中都没有。但是,如果您修复语法问题,它们会完全不同。
如果您想同时获取用户实例及其关联的配置文件,只需一次数据库命中,您就可以使用:
user = User.objects.select_related('profile').get(pk=my_pk_value)
现在,您可以通过执行user
从user.profile
访问配置文件,并且不会产生另一个数据库命中。如果你错过了select_related
,你可以做同样的事情,但它会引发另一个数据库命中。
如果您已经拥有一个用户对象user
,那么您将执行user.get_profile()
,这将获得实际的Profile对象 - 另一个db命中。