Django ORM JOIN's

时间:2011-08-13 09:15:09

标签: django django-models django-orm

我有一个表'评论',在内部字段'user',我会在同一个查询中获得个人资料个人资料。目前我有类似的东西

comments = models.Comment.objects.select_related('author__profile').filter(post=article)

不幸的是我无法检索有关个人资料的信息,我只能通过

来查看
comment.author._profile_set_cache

任何让它看起来很漂亮的想法?

comment.author.profile

1 个答案:

答案 0 :(得分:0)

如果'author'来自contrib.auth用户模型,那么您没有到UserProfile的FK。这是一个“反向一对一”。幸运的是,django能够使用“select_related”进行一对一的反向导航,因此查询实际上是在检索字段(您可以使用

进行检查)
print models.Comment.objects.select_related('author__profile').filter(post=article).query

获取用户个人资料的方法是使用get_profile()方法:

print comment.author.get_profile()

由于配置文件数据已经被缓存(这就是_profile_set_cache用于的原因),获取对象意味着没有其他查询。