2012-07-15 47 views
5

在Django中,在推荐的设置中,UserProfile实例通过OneToOneField与其User实例链接。使用Django中的userprofile检索用户的最有效方法

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    data = ... 

什么是视图中检索用户和配置文件的最有效方式? 我可以做一个select_related()内部连接查询,以获得一个数据库命中两个对象?还是它总是归结为两个独立的电话? Django的auth中间件可能甚至在视图被调用之前检索用户实例...有人知道吗?

+1

为了提供更多的细节:轮廓可以通过request.user.userprofile或request.user.get_profile()进行检索。但是,两者都会导致两次数据库命中。我的问题是:我们是否可以使用select_related将其减少为只有一个内部连接查询...如果是这样:是否比“常用”方法更有效? – 2012-07-15 18:32:53

回答

1

用户配置文件可以使用get_profile()检索。

见文档:https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

+0

Django提到了某处,get_profile缓存了它的结果,但是对于所有这些请求都是如此。因此,与“user.userprofile”相比,我确实看不出优势。但是让我感到困惑的是,在同一个模板中同时使用user.get_profile和user.userprofile时,数据库会被击中两次。所以到现在为止,我始终坚持使用user.userprofile。 Aynway,这两种检索配置文件的方法都会导致2个数据库命中:1x用户+ 1x配置文件。 select_related调用在一个内部联接中执行。这是可能的和有利的吗? – 2012-07-15 18:29:49

相关问题