Django嵌套ManyToMany QuerySet

时间:2014-07-15 17:45:39

标签: django django-queryset

我的Django模型中有一组嵌套的manytomany关系,我希望能够将所有相关的行连接到2个连接。它的设置如下:

class Book(models.Model):
    pass

class Group(models.Model):
    books = models.ManyToManyField(Book)

class Person(models.Model):
    groups = models.ManyToManyField(Group)

基本上,一个人可以属于多个群组,每个群组都有多本书,但同一本书可以分为多个群组,每个群组中有多个人。

我正在尝试为Person编写一个方法列出该人的所有书籍。我非常确定它可以通过嵌套循环来完成,但这并不是一个优雅的解决方案。我试图使用QuerySets但是陷入了第二级。我正在考虑以下方面的事情:

def all_books(self):
    return Book.objects.filter(group__in = self.groups)

但我总是回到一个空列表。我猜测问题出在__in,但我不知道到底是什么。

1 个答案:

答案 0 :(得分:1)

一种方法是:

def all_books(self):
    return Book.objects.filter(group__person=self)

将至少返回用户所属的一组中的所有图书。