为某个对象获取返回的空值

问题描述 投票:1回答:1

假设这两个模型。

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为空的对象,这不是正确的结果,这些对象具有文件,但是在预取之后,结果仅对少数几个对象为空。

python django django-models django-queryset django-database
1个回答
0
投票
尝试先按File排序folder查询集,以便每个文件夹获得不同的路径

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.