假设我有多对一关系
class Author(model):
name = TextField()
class Book(model):
year = IntegerField()
author = ForeignKey(Author)
您可以轻松地从“许多”方面进行过滤。例如,只保留作者满足某些条件的书
books.objects.filter(author__name__like='...')
从Author
方面来看,我该如何仅保留满足条件的书(对于每位 作者)?例如。是否有类似的东西
Author.related_filter(book__year__gt>1800)
会产生类似
的东西select * from
author join book on ...
where book.year > 1800
??
答案 0 :(得分:2)
您可以将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的内置方法来获取过滤的相关对象。