具有挑战性的django queryset构造

时间:2016-01-25 08:39:30

标签: python django django-queryset

我有一个Django应用程序,用户登录,设置各种主题,然后在所述主题下留下评论。以下模型反映了这个基本设置:

class Topic(models.Model):
    topic_text = models.TextField()
    submitted_on = models.DateTimeField(auto_now_add=True)

class Comment(models.Model):
    comment_text = models.TextField()
    which_topic = models.ForeignKey(Topic)
    submitted_by = models.ForeignKey(User)
    submitted_on = models.DateTimeField(auto_now_add=True)

对于每个用户,我正在尝试所有主题,其中任何一个最近的5条评论都是由用户编写的。换句话说,如果用户未在主题的最新5条评论中进行评论,则该主题将从查询集中排除。

那么我该如何构建这个查询集呢?顺便说一下,我会向你展示我尝试过的东西,但这是非常不合适而且显然是错误的。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我还没有测试过,但是子查询应该可行。像这样:

    
Topic.objects.filter(
    comment__submitted_by__in=Comment.objects.values(
        'submitted_by'
    ).order_by(
        '-submitted_on'
    ).limit(5),

    submitted_by=user
)

(如果您打算访问评论,请添加.prefetch_related('comment_set')。)