在Django中使用userprofile检索用户的最有效方法

在Django中使用userprofile检索用户的最有效方法,django,performance,user-profile,django-select-related,Django,Performance,User Profile,Django Select Related,在Django中,在推荐的设置中,UserProfile实例由OneToOneField与其用户实例链接 class UserProfile(models.Model): user = models.OneToOneField(User) data = ... 在视图中检索用户和配置文件最有效的方法是什么? 我是否可以执行select_related()内部联接查询,以在一次数据库命中时获取两个对象?还是总是归结为两个不同的电话?Django的auth中间件可能会在调用视图之前

在Django中,在推荐的设置中,UserProfile实例由OneToOneField与其用户实例链接

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    data = ...
在视图中检索用户和配置文件最有效的方法是什么?
我是否可以执行select_related()内部联接查询,以在一次数据库命中时获取两个对象?还是总是归结为两个不同的电话?Django的auth中间件可能会在调用视图之前检索用户实例。。。有人知道吗?

可以使用
get\u profile()
检索用户配置文件


请参阅文档:

Django在某处提到,get_profile缓存其结果,但对于所有此类请求都是如此。因此,与“user.userprofile”相比,我真的看不到它的优势。但真正让我困惑的是,在同一个模板中同时使用user.get_profile和user.userprofile时,数据库会被命中两次。所以到目前为止,我一直坚持使用user.userprofile。Aynway,两种检索配置文件的方法都会导致2次数据库点击:1x用户+1x配置文件。与select_相关的调用在一个内部联接中执行此操作。这是否可能且有利?提供更多详细信息:可通过request.user.userprofile或request.user.get_profile()检索配置文件。但是,这两种方法都会导致两次数据库命中。我的问题是:我们是否可以使用select\u related将其简化为一个内部联接查询。。。如果是这样的话:这比“通常”的方式更有效吗?