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
|
||||
def mlogbdefect(self):
|
||||
return MlogbDefect.objects.filter(mlogb=self)
|
||||
return self.mlogbdefect_set.all()
|
||||
|
||||
def cal_count_pn_jgqbl(self, cal_mlog=False):
|
||||
mqs = MlogbDefect.get_defect_qs_from_mlogb(self, ftype="in")
|
||||
|
|
|
|||
|
|
@ -765,6 +765,9 @@ class MlogbViewSet(CustomListModelMixin, CustomGenericViewSet):
|
|||
queryset = Mlogb.objects.all()
|
||||
serializer_class = MlogbDetailSerializer
|
||||
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
|
||||
ordering = ["create_time"]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue