Django中的多对多关系 - 与mysql的ISNULL()等价

时间:2009-11-01 23:07:58

标签: mysql django

我有两个基本上是这个模型:

Book(Model):
    title = models.CharField(max_length = 250)
    read_by = ManyToManyField(User)
    ...  

User(Model):
    firstName = models.CharField(max_length = 250)
    lastName = models.CharField(max_length = 250)
    ...

现在,如何为每本书创建一个包含“read”布尔值的书籍列表?在mysql中,我可以使用带有OUTER JOIN的ISNULL()。我怎么能在Django中这样做?我是否必须使用原始mysql?

澄清:我想为每个用户创建列表,以便每个用户都可以“勾选”他们阅读的每本书。

1 个答案:

答案 0 :(得分:1)

books = Book.objects.annotate(read=models.Count('read_by'))

然后,如果你只想要一本阅读书籍列表::

read_books = books.exclude(read=0)

或者你可以使用每个实例的read无效属性,作为一个整数,显然会评估未读书籍的正确布尔值。