【问题标题】:Many-to-many relationships in Django - mysql's ISNULL() equivalentDjango 中的多对多关系 - mysql 的 ISNULL() 等价物
【发布时间】:2009-11-01 23:07:57
【问题描述】:

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

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)
    ...

现在,如何为每本书创建一个包含“已读”布尔值的所有书籍的列表?在 mysql 中,我可以将 ISNULL() 与 OUTER JOIN 一起使用。我怎样才能在 Django 中做到这一点?我必须使用原始 mysql 吗?

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

【问题讨论】:

    标签: mysql django


    【解决方案1】:
    books = Book.objects.annotate(read=models.Count('read_by'))
    

    那么如果你只想要一个已读书籍的列表::

    read_books = books.exclude(read=0)
    

    或者您可以只使用每个实例的 read 注释属性,它是一个整数,显然会评估为未读书籍的正确布尔值。

    【讨论】:

    • 以其当前形式返回所有用户而不是特定用户的读取计数。要为每个用户创建一个“勾选表”,计数应该只查看特定用户阅读的书籍。
    猜你喜欢
    • 2010-09-29
    • 2014-01-23
    • 2011-01-13
    • 1970-01-01
    • 2021-09-11
    • 2011-08-22
    • 2011-02-07
    相关资源
    最近更新 更多