我有一个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_related(‘comment_set’).)