1

次の ModelResource があります。

class DivisionsResource(ModelResource):
    plants = fields.ToManyField('plants.api.resources.PlantsResource', 'plant_set', full = True)

    class Meta:
        queryset = Division.objects.all().prefetch_related('plant_set')
        allowed_method = ['get']
        filtering = {
                    "name": ('istartswith')
                }


class PlantsResource(ModelResource):
    picture = fields.ToOneField('files.api.resources.PlantPictureResource', 'picture', full=True)
    production_lines = fields.ToManyField('production_lines.api.resources.ProductionLinesResource','productionline_set', full=True, null=True)

    class Meta:
        queryset = Plant.objects.select_related('picture').all().prefetch_related('productionline_set')
        allowed_methods = ['get']

しかし、「divisions」リソースを呼び出して SQL クエリを見ると、 Plants Resource内で prefetch_related と select_related が実行されていません。SQL クエリを実行する代わりに、個々のプラントごとに productionline_set と画像を選択します。何故ですか?

ただし、次のようなことができることがわかりました。

queryset = Division.objects.all().prefetch_related('plant_set', 'plant_set__picture','plant_set__productionline_set')

部門モデルで確実にこれを行う必要がありますか? 親からの呼び出し時に「prefetch」と「select_related」を呼び出さないと超長くなります..

4

1 に答える 1