python - Django:使用 user.get_profile()

标签 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() 之类的东西吗?或者我应该在我的 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/

相关文章:

python - 未知层 : KerasLayer when i try to load_model

python - 为什么棱镜不突出显示 python?

python - 为什么 Django 1.0.x 无法从 PyPI 安装?

python - 使用 Subprocess 从 python 运行终端命令

python - django,身份验证后重定向到ajax操作

Python Statsmodels Mixedlm(混合线性模型)随机效应

python - 如何在 pandas query() 中使用 str 方法

Django channel 和 socket.io-client

python - Django 自定义用户在同步数据库时在运行时遇到导入问题

python - 扩展 Django 用户模型无法访问属性