我有一个关于使用 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()
之类的东西吗?或者我应该在我的 Post
模型中引用 UserProfile
而不是 User
?
最佳答案
您应该能够在您的 UserProfile 模型中使用 OneToOneField(User, related_name='profile')
然后执行 Post.objects.select_related('author__profile')
.
关于python - Django:使用 user.get_profile(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637620/