我有以下模型:
class Author(models.Model):
author_name = models.CharField()
class Book(models.Model):
book_name = models.CharField()
class AuthorBook(models.Model):
author_id = models.ForeignKeyField(Author)
book_id = models.ForeignKeyField(Book)
话虽如此,我正在尝试使用 Django ORM 模拟此查询(选择特定作者撰写的所有书籍,注意作者可以有很多书,书籍可以有很多作者):
SELECT book_name
FROM authorbook, book
WHERE authorbook.author_id = 1
AND authorbook.book_id = book.id
我读过 this FAQ page在 Django 网站上,但在我修改模型结构并删除 AuthorBook 之前,我很好奇是否可以使用当前结构模拟该查询。
最佳答案
你应该能够做到:
books = Book.objects.filter(authorbook__author_id=1)
获取符合您的 author_id 限制的 Book 对象的 QuerySet。
Django 的好处是您可以将它煮熟并在 shell 中使用它。您可能还会发现 http://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships 有用。
关于python - 如何使用 Django ORM 查询这个多对多示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/533726/