gpt4 book ai didi

python - Django ORM : filter related objects?

转载 作者:行者123 更新时间:2023-12-01 01:28:50 25 4
gpt4 key购买 nike

假设我有多对一的关系

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com