diff --git a/apps/qm/serializers.py b/apps/qm/serializers.py index 37a1e6f9..a7cc4b79 100644 --- a/apps/qm/serializers.py +++ b/apps/qm/serializers.py @@ -4,7 +4,7 @@ from apps.qm.models import (QuaStat, TestItem, Ftest, FtestItem, FtestWork, Ptes from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE from apps.utils.serializers import CustomModelSerializer from rest_framework import serializers -from rest_framework.exceptions import ValidationError +from rest_framework.exceptions import ValidationError, ParseError from apps.wpm.models import SfLog, WMaterial from django.db import transaction from apps.inm.serializers import MaterialBatchDetailSerializer @@ -300,19 +300,21 @@ class FtestProcessSerializer(CustomModelSerializer): with transaction.atomic(): instance = super().update(instance, validated_data) for item in ftestitems: - if "id" in item and item["id"]: - FtestItem.objects.filter(id=item["id"]).update( - test_user = item["test_user"], - test_val_json = item["test_val_json"]) - else: - FtestItem.objects.create(ftest=instance, **item) + ins, is_create = FtestItem.objects.get_or_create( + testitem = item["testitem"], ftest=instance, defaults=item) + if is_create: + raise ParseError("新的检测项!") + for k, v in item.items(): + setattr(ins, k, v) + ins.save() is_ok = True for item2 in ftestdefects: - if "id" in item2 and item2["id"]: - ins: FtestDefect = FtestDefect.objects.get(id=item2["id"]) - else: - ins = FtestDefect.objects.create(ftest=instance, **item2) - ins.has = item2["has"] + ins, is_create = FtestDefect.objects.get_or_create( + ftest=instance, defect=item2["defect"], defaults=item2) + if is_create: + raise ParseError("新的缺陷项!") + for k, v in item2.items(): + setattr(ins, k, v) ins.save() if ins.has and ins.defect.okcate in [Defect.DEFECT_NOTOK]: is_ok = False