perf: mlogb 列表预取 mlogbdefect 与 defect 消除 N+1
将 Mlogb.mlogbdefect 改为反向管理器 self.mlogbdefect_set.all() 以便 prefetch_related 命中缓存;MlogbViewSet 增加对 mlogbdefect_set + defect 的预取。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
46c9eba306
commit
40ebf720f7
|
|
@ -510,7 +510,7 @@ class Mlogb(BaseModel):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mlogbdefect(self):
|
def mlogbdefect(self):
|
||||||
return MlogbDefect.objects.filter(mlogb=self)
|
return self.mlogbdefect_set.all()
|
||||||
|
|
||||||
def cal_count_pn_jgqbl(self, cal_mlog=False):
|
def cal_count_pn_jgqbl(self, cal_mlog=False):
|
||||||
mqs = MlogbDefect.get_defect_qs_from_mlogb(self, ftype="in")
|
mqs = MlogbDefect.get_defect_qs_from_mlogb(self, ftype="in")
|
||||||
|
|
|
||||||
|
|
@ -765,6 +765,9 @@ class MlogbViewSet(CustomListModelMixin, CustomGenericViewSet):
|
||||||
queryset = Mlogb.objects.all()
|
queryset = Mlogb.objects.all()
|
||||||
serializer_class = MlogbDetailSerializer
|
serializer_class = MlogbDetailSerializer
|
||||||
select_related_fields = ["material_out", "material_in", "test_user", "wm_in__defect"]
|
select_related_fields = ["material_out", "material_in", "test_user", "wm_in__defect"]
|
||||||
|
prefetch_related_fields = [
|
||||||
|
Prefetch("mlogbdefect_set", queryset=MlogbDefect.objects.select_related("defect")),
|
||||||
|
]
|
||||||
filterset_class = MlogbFilter
|
filterset_class = MlogbFilter
|
||||||
ordering = ["create_time"]
|
ordering = ["create_time"]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue