假设我有多对一的关系
class Author(model):
name = TextField()
class Book(model):
year = IntegerField()
author = ForeignKey(Author)
您可以轻松地从“多”方面进行过滤。例如,只保留作者满足某个条件的书籍
books.objects.filter(author__name__like='...')
从作者
方面,我怎样才能只保留(对于每个作者)满足条件的书籍?例如。有没有类似的东西
Author.related_filter(book__year__gt>1800)
这会产生类似的东西
select * from
author join book on ...
where book.year > 1800
??
最佳答案
您可以使用prefetch_related
与定制Prefetch
对象:
authors = Author.objects.prefetch_related(
Prefetch('book_set', queryset=Book.objects.filter(year>1800), to_attr='modern_books')
)
for author in authors:
for book in author.modern_books.all():
# do stuff
这应该会导致总共两个查询,因此不完全是您正在寻找的单个 SQL 语句,而是 ORM 获取过滤的相关对象的内置方法。
关于python - Django ORM : filter related objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53090077/