如何获得评论最多的记录集?

时间:2014-11-22 15:12:44

标签: python django

请通过ORM帮助提出请求。

是对视频发表评论的模型:

class Comment(models.Model):
    user = models.ForeignKey(
        User, 
        verbose_name=u"Пользователь", 
        blank=True, 
        null=True,
    )   
    user_no_auth = models.CharField(
        verbose_name=u'Пользователь не авторизованный',
        max_length=100,
        default=None,
        null=True,
        blank=True,
    )       
    comment = HTMLField(
        verbose_name=u'Комментарий',
        max_length=50000, 
        default=None,
        blank=True,
    )   
    video_id = models.IntegerField(
        verbose_name=u'Номер видео',
        default=None,
        null=True,
        blank=True,
    )           
    date = models.DateTimeField(
        verbose_name=u'Дата создания',
        default=datetime.now(),
        auto_now=True,
    )
    last_edit_date = models.DateTimeField(
        verbose_name=u'Дата последнего редактирования',
        default=datetime.now(),
        auto_now=True,
    )       
    is_active = models.BooleanField(
        verbose_name=u'Активно',
        default=True,
    )

此模型填写为follows

我需要获得一组标识符video_id,他们的评论总数更多

1 个答案:

答案 0 :(得分:0)

首先,您的模型定义是错误的。我没有在视频模型的评论模型中看到ForeignKey。 video_id因为IntegerField 不属于只属于那里。这应该是这样的:

由于你没有发布你的视频模型,我只补了一个:

class V_Video(models.Model): # 
  name = models.CharField(max_length=100)
  # ....

class Comment(models.Model):
  video = models.ForeignKey(V_Video, related_name="video_comments")
  # .. other fields 

要获取的查询,例如5条评论最多的视频是:

videos_with_most_comments = V_Video.objects.annotate(
                                               num_comments=Count('video_comments')
                                                   ).order_by('-num_comments')[:5]

这是 cheat sheet