gpt4 book ai didi

python - 预取某些对象返回空值

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

假设这两个模型。

class Folder(model):
name = models.CharField(max_length=8)
files = models.ManyToManyField('File')

class File:
path = models.CharField(max_length=255)

首先,我获取文件夹,并在循环它们时获取具有不同路径的文件

folders = Folder.objects.all()

for folder in folders:
files_with_distinct_path = folder.files.distinct('path').order_by('path')

但这遇到了 N+1 问题,所以我尝试在获取所有文件夹的同时预取文件。

from django.db.models import Prefetch

folders = Folder.objects.prefetch_related(
Prefetch(
'files', queryset=File.objects.distinct('path').order_by('path'), to_attr='distinct_files'
)
)

但事实证明,现在存在具有空 distinct_files 的对象,这不是正确的结果,这些对象有文件,但预取后,只有少数对象的结果为空。

最佳答案

首先尝试按文件夹文件查询集进行排序,以便获得每个文件夹的不同路径

queryset=File.objects.order_by('folders', 'path').distinct('path')

关于python - 预取某些对象返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59527030/

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