Python 挑战性的django queryset施工

Python 挑战性的django queryset施工,python,django,django-queryset,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()

我有一个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条评论中没有发表评论,则该主题将被排除在查询集中


那么我该如何形成这个查询集呢?顺便说一句,我本打算向你们展示我所做的尝试,但它远远不够,而且显然是错误的。有人能帮忙吗?

我还没有测试过,但是子查询应该可以。大概是这样的:

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

    submitted_by=user
)

(如果您计划访问评论,请添加
.prefetch\u related('comment\u set')

我认为尝试选择该用户发表评论的主题是没有意义的,而且只有在评论位于前5位的情况下,尽管可以使用嵌套查询。相反,我宁愿选择这个用户评论过的主题,然后根据评论在代码中的位置对它们进行过滤(并缓存它,因为它很重)。我同意。我发现,我几乎不可能对评论部分的位置进行过滤。当我仔细查看需求时,恐怕我们的建议都不起作用。我会编辑,我们会考虑更多。您的编辑现在会考虑所有评论。。。关键是,子查询实际上无法知道如何只选择与当前主题相关的注释,确切地说:-(在Python中进行第二次过滤可能比执行更复杂的操作更好)。