如何获取 'User' 已回复的所有 'Post' 个对象?

How to get all 'Post' objects where 'User' has replied?

我有一个数据库 table Post 用于存储用户创建的帖子。其他用户可以创建对这些帖子的回复,并存储在 PostReply table 中。现在,Post 的所有者可以接受单个 PostReply,而 PostReply 的所有者必须知道他们已创建接受回复的所有 Post

基本上,模型是这样的:

class Post(models.Model):
    owner = models.ForeignKey('auth.User', related_name = 'posts')
    content = models.CharField(max_length = 1000, default = '')

class PostReply(models.Model):
    owner = models.ForeignKey('auth.User', related_name = 'replies')
    post = models.ForeignKey(Post, related_name = 'replies')
    accepted = models.BooleanField(default = False)

我遇到的问题是:如何检索接受回复的是用户的所有帖子?我知道我可以像这样获取用户的所有 PostReply 对象:

queryset = PostReply.objects.filter(owner = self.request.user)

...我可以通过仅过滤接受的查询集来定义此查询集:

queryset = queryset.filter(accepted = True)

...但我不知道如何获取相关的 Post 项。

为了详细说明,这里有一个场景:

User 'Foo' creates a post 1
User 'Bar' creates a reply to post 1
User 'Foo' accepted 'Bar's reply to post 1

现在,用户 'Bar' 应该能够向服务器查询他的回复被接受的帖子列表。我该怎么做?

如果我没记错的话,你可以试试:

posts = Post.objects.filter(postreply__owner=self.request.user, postreply__accepted=True)

更多关于 Django documentation: Lookups that span relationships

旁注:注意接受的 post 回复的唯一性。