Django:使用user.get_profile()

时间:2011-04-12 15:21:23

标签: python django django-authentication

我有一个关于使用django auth的新手问题。这是我的模特:

class UserProfile(models.Model):
    """ Main user profile used on a website """
    user            = models.ForeignKey(User, unique=True) # reference to built in django user
    display_name    = models.CharField(max_length=100, blank=True)
    # and several more fields

class Post(models.Model):
    """ Blog entry """
    author          = models.ForeignKey(User)
    tags            = models.ManyToManyField(Tag)
    title           = models.CharField(max_length=255)
    text            = models.TextField()

麻烦来了,当我想输出帖子列表时:

#view
posts = Post.objects.all()
#template
{% for post in posts %}
    {{ post.title }} by {{ post.author.get_profile.display_name }}
{% endfor %}

对于100个帖子,这会提供101个查询,因为每个get_profile()都会转到数据库以获取display_name字段。

有没有办法解决这个问题?我可以使用select_related()或其他什么吗?或者我应该在我的UserProfile模型中引用User而不是Post

1 个答案:

答案 0 :(得分:11)

您应该可以在UserProfile模型中使用OneToOneField(User, related_name='profile'),然后执行Post.objects.select_related('author__profile')