gpt4 book ai didi

python - django prefetch_related 跨多个具有过滤条件的一对多关系

转载 作者:行者123 更新时间:2023-12-05 02:09:43 27 4
gpt4 key购买 nike

我想通过 prefetch_related 查询来获取我的模型和所有相关模型,遵循一对多关系,但具有过滤条件。我的目标是使用 prefetch_related 在一个 django 查询中获取我的所有模型和相关模型(因此在遍历相关模型时不会访问数据库)。我需要朝一对多的方向发展。

假设我有以下简单的图书馆模型,其中有很多书和很多页。

from django.db import models

class Library(models.Model):
name = models.CharField(max_length=50)

class Book(models.Model):
title = models.CharField(max_length=50)
genre = models.CharField(max_length=50)
library = models.ForeignKey(Library, on_delete=models.CASCADE)

class Page(models.Model):
content = models.TextField()
book = models.ForeignKey(Book, on_delete=models.CASCADE)

我知道我可以通过 models.Library.objects.prefetch_related('book_set__page_set') 一次性获得所有内容,但如果我想限制使用 genre=' 预订怎么办幻想'?如何在我的跨关系预取查询中添加此过滤条件?

最佳答案

补充@themanatuf 的答案,它缺少相关页面模型的预取。下面的查询代码将预取所有图书馆模型及其相关的书籍和页面,但仅限于 Book genre='fantasy':

pf_queryset = models.Book.objects.filter(genre="fantasy").prefetch_related("page_set")
pf = Prefetch("book_set", queryset=pf_queryset)
models.Library.objects.prefetch_related(pf).all()

关于python - django prefetch_related 跨多个具有过滤条件的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59650857/

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