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