From 40ebf720f753a0d3c9d3651649ec56e54656a306 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 30 Apr 2026 13:47:25 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20mlogb=20=E5=88=97=E8=A1=A8=E9=A2=84?= =?UTF-8?q?=E5=8F=96=20mlogbdefect=20=E4=B8=8E=20defect=20=E6=B6=88?= =?UTF-8?q?=E9=99=A4=20N+1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 Mlogb.mlogbdefect 改为反向管理器 self.mlogbdefect_set.all() 以便 prefetch_related 命中缓存;MlogbViewSet 增加对 mlogbdefect_set + defect 的预取。 Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/wpm/models.py | 2 +- apps/wpm/views.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/wpm/models.py b/apps/wpm/models.py index ee73e776..abc604b6 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -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") diff --git a/apps/wpm/views.py b/apps/wpm/views.py index b55651c3..bbf07ae5 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -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"]