diff --git a/apps/inm/models.py b/apps/inm/models.py index 74afe3d0..5e099c14 100644 --- a/apps/inm/models.py +++ b/apps/inm/models.py @@ -153,6 +153,10 @@ class MIOItem(BaseModel): mioitem_count_fields.append(f.name) return mioitem_count_fields + @property + def mioitemw(self): + return MIOItemw.objects.filter(mioitem=self) + class MIOItemA(BaseModel): """ 组合件出入库明细 diff --git a/apps/inm/serializers.py b/apps/inm/serializers.py index 9835a7de..520a8f60 100644 --- a/apps/inm/serializers.py +++ b/apps/inm/serializers.py @@ -92,15 +92,11 @@ class MIOItemACreateSerializer(CustomModelSerializer): fields = ['material', 'batch', 'zhuidu', 'b_zuidawaijing', 'g_zuidaneijing'] -class MIOItemwCreateSerializer(CustomModelSerializer): - class Meta: - model = MIOItemw - fields = ["number", "note"] - class MIOItemwSerializer(CustomModelSerializer): class Meta: model = MIOItemw fields = "__all__" + read_only_fields = EXCLUDE_FIELDS_BASE + ["mioitem"] class MIOItemwTestSerializer(CustomModelSerializer): class Meta: @@ -118,12 +114,12 @@ class MIOItemwTestSerializer(CustomModelSerializer): class MIOItemCreateSerializer(CustomModelSerializer): assemb = MIOItemACreateSerializer( label='组合件信息', many=True, write_only=True, required=False) - mioitemw_ = MIOItemwCreateSerializer(many=True, required=False) + mioitemw = MIOItemwSerializer(many=True, required=False) class Meta: model = MIOItem fields = ['mio', 'warehouse', 'material', - 'batch', 'count', 'assemb', 'is_testok', 'mioitemw_'] + 'batch', 'count', 'assemb', 'is_testok', 'mioitemw'] def create(self, validated_data): mio = validated_data['mio'] @@ -142,7 +138,7 @@ class MIOItemCreateSerializer(CustomModelSerializer): count = validated_data["count"] batch = validated_data["batch"] assemb = validated_data.pop('assemb', []) - mioitemw_ = validated_data.pop('mioitemw_', []) + mioitemw = validated_data.pop('mioitemw', []) instance = super().create(validated_data) assemb_dict = {} for i in assemb: @@ -157,12 +153,12 @@ class MIOItemCreateSerializer(CustomModelSerializer): else: raise ParseError('缺少组合件') if material.tracking == Material.MA_TRACKING_SINGLE: - if count == 1 and len(mioitemw_) == 0: + if count == 1 and len(mioitemw) == 0: MIOItemw.objects.create(mioitem=instance, number=batch) - elif count == 1 and len(mioitemw_) >= 1: - MIOItemw.objects.create(mioitem=instance, number=mioitemw_[0]['number'], note=mioitemw_[0]['note']) - elif count > 1 and len(mioitemw_) == count: - for item in mioitemw_: + elif count == 1 and len(mioitemw) >= 1: + MIOItemw.objects.create(mioitem=instance, number=mioitemw[0]['number'], note=mioitemw[0]['note']) + elif count > 1 and len(mioitemw) == count: + for item in mioitemw: MIOItemw.objects.create(mioitem=instance, number=item['number'], note=item['note']) else: raise ParseError('单个明细信息不匹配') @@ -190,7 +186,7 @@ class MIOItemSerializer(CustomModelSerializer): source='material', read_only=True) inout_date = serializers.DateField(source='mio.inout_date', read_only=True) test_user_name = serializers.CharField(source='test_user.name', read_only=True) - mioitemw_ = MIOItemwSerializer(source='w_mioitem', read_only=True, many=True) + mioitemw = MIOItemwSerializer(many=True, required=False) class Meta: model = MIOItem