如何让我的所有提要排除我评论的内容

How to get all my feeds exclude which is commented by me

有三个类

class User(models.Model):
  name = models.CharField()

class Feed(models.Model):
  user = models.ForeignKey(User)

class Comment(models.Model):
  user = models.ForeignKey(User)
  feed = models.ForeignKey(Feed)

如果我指定了一个名为 Jack 的用户,如何获取 Jack 的提要和他们的评论,但如果不是 Jack,则无法获取评论用户的评论

如果杰克有两个提要:

[
  "feed1": [{"comment1": {"user": "Lily"}}, {"comment2": {"user": "Bruce"}],
  "feed2": [{"comment1": {"user": "Jack"}}, {"comment2": {"user":"Lily"}],
]

我用下面的代码得到:

Feed.objects.filter(user__name="Jack").exclude(comment__user__name="Jack")

我要得到结果:

[
  "feed1": [{"comment1": {"user": "Lily"}}, {"comment2": {"user": "Bruce"}],
  "feed2": [{"comment2": {"user":"Lily"}],
]

但事实上,returns 错误的结果:

[
  "feed1": [{"comment1": {"user": "Lily"}}, {"comment2": {"user": "Bruce"}]
]

我只想删除 Jack 未评论的评论,但它会删除其中一条评论具有相同用户 Jack 的所有供稿

您可以预取除jack评论之外的所有评论

feeds = Feed.objects.filter(user__name="Jack").prefetch_related(
Prefetch(
"feed_set",
queryset="comment.objects.exclude(user__name='Jack')",
to_attr='all_comments'
)

您可以通过

获取每个供稿的评论
for feed in feeds:
    comments = feed.all_comments #No database call is made by this statement

请参阅 https://docs.djangoproject.com/en/1.11/ref/models/querysets/#prefetch-related 以了解有关 prefetch_related 的更多信息。