Python 挑战性的django queryset施工
我有一个Django应用程序,用户在其中登录,设置各种主题,然后在所述主题下留下评论。以下模型反映了这一基本设置: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()
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中进行第二次过滤可能比执行更复杂的操作更好)。