From b9d72f96199f315235c969d569d8d4d94c88d624 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 5 Nov 2025 14:24:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ftestprocess=20=E5=9C=A8create=E5=92=8Cu?= =?UTF-8?q?pdate=E6=97=B6=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/qm/serializers.py | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/apps/qm/serializers.py b/apps/qm/serializers.py index 006df344..4ae63cfe 100644 --- a/apps/qm/serializers.py +++ b/apps/qm/serializers.py @@ -367,24 +367,22 @@ class FtestProcessSerializer(CustomModelSerializer): instance = super().create(validated_data) for item in ftestitems: FtestItem.objects.create(ftest=instance, **item) + + # 判断是否合格和主缺陷 is_ok = True defect_main = None - has_is_main = False for item2 in ftestdefects: defect:Defect = item2["defect"] if defect.okcate in [Defect.DEFECT_NOTOK] and item2["has"]: is_ok = False - if not has_is_main: - item2["is_main"] = True - has_is_main = True + if defect_main is None: defect_main = defect + item2["is_main"] = True else: item2["is_main"] = False FtestDefect.objects.create(ftest=instance, **item2) - if not is_ok: - instance.defect_main = defect_main - else: - instance.defect_main = None + + instance.defect_main = defect_main instance.is_ok = is_ok instance.save() return instance @@ -402,9 +400,8 @@ class FtestProcessSerializer(CustomModelSerializer): for k, v in item.items(): setattr(ins, k, v) ins.save() - is_ok = True - defect_main = None - has_is_main = False + + # 先保存 for item2 in ftestdefects: try: ins:FtestDefect = FtestDefect.objects.get(ftest=instance, defect=item2["defect"]) @@ -416,22 +413,21 @@ class FtestProcessSerializer(CustomModelSerializer): for k, v in item2.items(): setattr(ins, k, v) ins.save() - if ins.is_main: - has_is_main = True - defect_main = ins.defect + + # 判断是否合格和主缺陷 + is_ok = True + defect_main = None + for ins in FtestDefect.objects.filter(ftest=instance).order_by("create_time"): if ins.has and ins.defect.okcate in [Defect.DEFECT_NOTOK]: is_ok = False - if not has_is_main: - ins.is_main = True - has_is_main = True + if defect_main is None: defect_main = ins.defect + ins.is_main = True else: ins.is_main = False - ins.save() - if not is_ok: - instance.defect_main = defect_main - else: - instance.defect_main = None + ins.save(update_fields=["is_main"]) + + instance.defect_main = defect_main instance.is_ok = is_ok instance.save() return instance \ No newline at end of file