Huu*_*uze 5 python django django-orm
我有以下型号:
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)
Run Code Online (Sandbox Code Playgroud)
话虽如此,我正在尝试使用Django ORM来模拟这个查询(选择特定作者编写的所有书籍,注意作者可以有很多书,书籍可以有很多作者):
SELECT book_name
FROM authorbook, book
WHERE authorbook.author_id = 1
AND authorbook.book_id = book.id
Run Code Online (Sandbox Code Playgroud)
我在Django网站上阅读了这个FAQ页面,但在我修改模型结构并删除AuthorBook之前,我很好奇是否可以使用当前结构模拟该查询.
Emi*_*Sit 14
你应该能够做到:
books = Book.objects.filter(authorbook__author_id=1)
Run Code Online (Sandbox Code Playgroud)
获取与author_id限制匹配的Book对象的QuerySet.
关于Django的好处是你可以做这个并在shell中玩它.您可能还会发现 http://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships 非常有用.
web*_*kie 14
"AuthorBook"似乎没有正确建模.
你应该使用ManyToManyField:
class Book(models.Model):
name = models.CharField()
authors = models.ManyToManyField(Author)
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
books = Book.objects.filter(authors__id=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |