我有一个数据库表Post
,用于存储用户创建的帖子。其他用户可以创建对这些帖子的回复,存储在PostReply
表中。现在,Post
的所有者可以接受一个PostReply
,PostReply
的所有者必须知道他们创建的所有Post
已接受回复。< / p>
基本上,模型看起来像这样:
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
现在,用户&#39; Bar&#39;应该能够在服务器上查询他的回复是被接受的帖子的列表。我该怎么做?
答案 0 :(得分:1)
如果我没弄错的话,你可以尝试:
posts = Post.objects.filter(postreply__owner=self.request.user, postreply__accepted=True)
更多关于Django documentation: Lookups that span relationships。
附注:注意接受的帖子回复的独特性。