Django按问题排序

时间:2017-07-29 21:31:46

标签: django

在这种情况下,我不知道该怎么办。可能有人知道。

我有2个型号:

评论:

class Comments(models.Model):
    text = models.CharField(max_length=300, null=False)
    image = models.FileField(upload_to=user_directory_path_comments, validators=[validate_file_extension], blank=True, null=True)
    articles = models.ForeignKey(Articles, verbose_name="Article", null=False)
    author = models.ForeignKey(User, verbose_name="Auteur")
    in_answer_to = models.ForeignKey('self', verbose_name="En réponse au commentaire", blank=True, null=True, on_delete=models.CASCADE)
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
    update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")

和Up模型:

class Up(models.Model):
    comments = models.ForeignKey(Comments, verbose_name="Commentaire", null=True, blank=True)
    user = models.ForeignKey(User, verbose_name="Auteur", null=False)

用户可以添加评论,他们可以" Up"一些有用的评论。

所以,默认情况下我想按日期订购评论。但是我想按照Up的数量优先订购。

为了让您了解注释和注册的注册方式,这是我的数据库的屏幕截图:

评论: enter image description here

Up: enter image description here

例如,id为50的注释从两个不同的用户中获得2 Up。所以它应该在列表的顶部,而评论49只有1 Up。

现在,我只是按日期使用订单,我需要Up的订单:

comments = Comments.objects.all().exclude(in_answer_to__isnull=False).order_by('-date') 

我需要类似的东西:

comments = Comments.objects.all().exclude(in_answer_to__isnull=False).order_by('-date', 'Up')

1 个答案:

答案 0 :(得分:0)

当您考虑以下订单问题的SQL时,您会发现您可能需要计算引用对象的数量

因此注释计数和顺序

comments = Video.objects.all().exclude(
    in_answer_to__isnull=False
).annotate(
    num_up=Count('up')
).order_by('-date', 'num_up')