【发布时间】:2018-09-09 02:03:06
【问题描述】:
我正在使用 Django sites framework (Django 2.1) 将应用拆分为多个站点。除了User 模型之外,我的所有模型都是特定于站点的。这是我的Post 模型:
post.py
class Post(models.Model):
parent = models.ForeignKey(
'self',
on_delete=models.CASCADE,
related_name='children',
related_query_name='child',
blank=True,
null=True,
)
title = models.CharField(
max_length=255,
blank=True,
)
body_raw = models.TextField()
body_html = models.TextField(blank=True)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
site = models.ForeignKey(Site, on_delete=models.CASCADE)
on_site = CurrentSiteManager()
我没有问题按站点分隔帖子。当我想获得帖子时,我会致电:
posts = Post.on_site.filter(...)
我有一个名为UserProfile 的单独模型。这是一个多对一的配置文件,其中为每个用户站点组合创建了一个唯一的配置文件(类似于 SE 的配置文件实施)。个人资料有一个reputation 属性,我想在收到任何帖子时访问该属性。每个站点的 reputation 属性应该不同(例如,在 SE 上,您所属的每个站点都有不同的代表)。
user_profile.py
class UserProfile(models.Model):
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
reputation = models.PositiveIntegerField(default=1)
site = models.ForeignKey(Site, on_delete=models.CASCADE)
on_site = CurrentSiteManager()
当我从查询中获得Posts 时,如何访问用户的username(在User 模型上)以及用户的reputation(在UserProfile 模型上)?
我想做这样的事情:
Post.on_site.filter(...)
.select_related('user__userprofile')
.filter_related(user__userprofile.site == get_current_site())
如何过滤多对一相关模型?
【问题讨论】:
标签: python django django-templates django-sites