【发布时间】:2017-08-27 16:50:03
【问题描述】:
我有 4 个模型类:User、Stack、Article 和 Rating。用户可以创建堆栈、添加文章、将它们放在堆栈上、评价文章并共享堆栈。 我想获取特定堆栈的所有文章的查询集(由 pk 获取)并按当前用户评分排序。如果堆栈是共享的并且一篇文章被另一个用户评分,我的查询会导致我的 QuerySet 中出现重复条目,因此一篇文章存在两次评分对象:
qs = stack.article_set.all().order_by("ratings__rating", "-pk")
型号:
class Rating(models.Model):
article = models.ForeignKey(
Article,
on_delete=models.CASCADE,
related_name='ratings'
)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='ratings'
)
rating = models.IntegerField()
class Stack(models.Model):
title = models.CharField(null=True, max_length=100)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Article(models.Model):
stack = models.ForeignKey(Stack, null=True, blank=True, on_delete=models.CASCADE)
text = models.TextField(null=True, blank=True)
我怎样才能得到没有重复的有序 QuerySet,只是按 request.user 评级排序。
更新
我现在要做的是查询两次。一次获取已评级的文章对象,第二次获取未排序的当前未评级的文章对象。
context['rated_articles'] = deck.article_set.filter(
ratings__user__exact=self.request.user
).order_by("ratings__rating", "-pk")
context['not_rated_articles'] = deck.article_set.all().exclude(
ratings__user__exact=self.request.user
)
【问题讨论】:
标签: django django-views django-queryset