From 4460d4af61eecbf2967b95e2109260603853192f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 2 Nov 2023 15:20:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20mlogserializer=20material=5Fouts=5F=20bu?= =?UTF-8?q?g=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0027_alter_mlogb_material_out.py | 20 +++++++++++++++++++ apps/wpm/models.py | 6 +++++- apps/wpm/serializers.py | 17 ++++++++-------- 3 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 apps/wpm/migrations/0027_alter_mlogb_material_out.py diff --git a/apps/wpm/migrations/0027_alter_mlogb_material_out.py b/apps/wpm/migrations/0027_alter_mlogb_material_out.py new file mode 100644 index 00000000..396d032c --- /dev/null +++ b/apps/wpm/migrations/0027_alter_mlogb_material_out.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.12 on 2023-11-02 07:10 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0023_auto_20231102_1128'), + ('wpm', '0026_alter_wmaterial_unique_together'), + ] + + operations = [ + migrations.AlterField( + model_name='mlogb', + name='material_out', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mlogb_material_out', to='mtm.material', verbose_name='产物'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 80dd9b71..b7f5ab29 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -135,12 +135,16 @@ class Mlog(CommonADModel): submit_user = models.ForeignKey( User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_submit_user') + @property + def mlogb(self): + return Mlogb.objects.filter(mlog=self) + class Mlogb(BaseModel): mlog = models.ForeignKey(Mlog, verbose_name='关联日志', on_delete=models.CASCADE) material_out = models.ForeignKey( - Material, verbose_name='产物', on_delete=models.CASCADE) + Material, verbose_name='产物', on_delete=models.CASCADE, related_name='mlogb_material_out') count_ok = models.PositiveIntegerField('合格数量', default=0) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 1ecb3037..dc625669 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -112,8 +112,8 @@ class MlogSerializer(CustomModelSerializer): equipment_2_name = serializers.CharField( source='equipment_2.name', read_only=True) shift_name = serializers.CharField(source='shift.name', read_only=True) - material_outs_ = MlogbSerializer( - label='多产出件信息', many=True, source='material_outs') + mlogb = MlogbSerializer( + label='多产出件信息', many=True, required=False) handle_users_ = UserSimpleSerializer( source='handle_users', many=True, read_only=True) @@ -124,7 +124,6 @@ class MlogSerializer(CustomModelSerializer): ['submit_time', 'submit_user', 'material_outs'] def create(self, validated_data): - print(1, validated_data) mtask = validated_data.get('mtask', None) batch = validated_data['batch'] handle_date = validated_data['handle_date'] @@ -143,12 +142,12 @@ class MlogSerializer(CustomModelSerializer): if Mlog.objects.filter(mtask=mtask, batch=batch, handle_date=handle_date, handle_user=handle_user).exists(): raise ValidationError('存在相同的日志记录') with transaction.atomic(): - material_outs_ = validated_data.pop('material_outs_', []) + mlogb = validated_data.pop('mlogb', []) instance = super().create(validated_data) brotherId_should_list = material_out.brothers if brotherId_should_list: - if material_outs_: - for item in material_outs_: + if mlogb: + for item in mlogb: if item['material_out'].id in brotherId_should_list: Mlogb.objects.create( mlog=instance, material_out=item['material_out'], count_ok=item['count_ok']) @@ -163,12 +162,12 @@ class MlogSerializer(CustomModelSerializer): validated_data.pop('handle_user', None) validated_data.pop('mgroup', None) with transaction.atomic(): - material_outs_ = validated_data.pop('material_outs_', []) + mlogb = validated_data.pop('mlogb', []) instance = super().update(instance, validated_data) brotherId_should_list = instance.material_out.brothers if brotherId_should_list: - if material_outs_: - for item in material_outs_: + if mlogb: + for item in mlogb: id = item.get('id', None) if id: mlogb = Mlogb.objects.get(id=id)