diff --git a/hb_server/apps/qm/migrations/0005_auto_20211108_1102.py b/hb_server/apps/qm/migrations/0005_auto_20211108_1102.py new file mode 100644 index 0000000..428eae4 --- /dev/null +++ b/hb_server/apps/qm/migrations/0005_auto_20211108_1102.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.6 on 2021-11-08 03:02 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('qm', '0004_auto_20211108_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='testrecord', + name='record_data', + ), + migrations.AlterField( + model_name='testrecorditem', + name='test_record', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='item_test_record', to='qm.testrecord', verbose_name='关联的检测记录'), + ), + ] diff --git a/hb_server/apps/qm/models.py b/hb_server/apps/qm/models.py index ac58211..8a3de4b 100644 --- a/hb_server/apps/qm/models.py +++ b/hb_server/apps/qm/models.py @@ -47,9 +47,7 @@ class TestRecord(CommonAModel): """ 检验记录 """ - form = models.ForeignKey('mtm.recordform', verbose_name='所用表格', on_delete=models.CASCADE) - record_data = models.JSONField('记录数据', default=dict, blank=True) is_testok = models.BooleanField('是否合格', default=True) fifo_item = models.ForeignKey('inm.fifoitem', verbose_name='关联的出入库批次', on_delete=models.CASCADE, null=True, blank=True) @@ -65,4 +63,4 @@ class TestRecordItem(BaseModel): field_value = models.JSONField('录入值', default=dict, blank=True) need_judge = models.BooleanField('是否需要判定', default=False) is_testok = models.BooleanField('是否合格', default=True) - test_record = models.ForeignKey(TestRecord, verbose_name='关联的检测记录', on_delete=models.CASCADE) \ No newline at end of file + test_record = models.ForeignKey(TestRecord, verbose_name='关联的检测记录', on_delete=models.CASCADE, related_name='item_test_record') \ No newline at end of file diff --git a/hb_server/apps/qm/serializers.py b/hb_server/apps/qm/serializers.py index 8924a14..628ba00 100644 --- a/hb_server/apps/qm/serializers.py +++ b/hb_server/apps/qm/serializers.py @@ -35,13 +35,18 @@ class AnalysisItemSerializer(serializers.ModelSerializer): pass -class TestRecordItemSerializer(serializers.ModelSerializer): +class TestRecordItemCreateSerializer(serializers.ModelSerializer): class Meta: model = TestRecordItem fields = ['form_field', 'field_value'] + +class TestRecordItemSerializer(serializers.ModelSerializer): + class Meta: + model = TestRecordItem + fields = '__all__' class TestRecordCreateSerializer(serializers.ModelSerializer): - record_data = TestRecordItemSerializer(many=True) + record_data = TestRecordItemCreateSerializer(many=True) class Meta: model = TestRecord fields = ['form', 'record_data', 'is_testok', 'fifo_item'] @@ -59,21 +64,21 @@ class TestRecordListSerializer(serializers.ModelSerializer): class TestRecordDetailSerializer(serializers.ModelSerializer): form_ = RecordFormSimpleSerializer(source='form', read_only=True) - record_data_ = serializers.SerializerMethodField() + record_data_ = TestRecordItemSerializer(source='item_test_record', read_only=True, many=True) class Meta: model = TestRecord fields = '__all__' @staticmethod def setup_eager_loading(queryset): - queryset = queryset.select_related('form','fifo_detail') + queryset = queryset.select_related('form','fifo_item') return queryset - def get_record_data_(self, obj): - record_data = obj.record_data - all_fields = RecordFormField.objects.filter(form=obj.form, is_deletd=False).order_by('sort') - all_fields_l = RecordFormFieldSerializer(instance=all_fields, many=True).data - for i in all_fields_l: - key = i['field_key'] - i['field_value'] = record_data.get(key, None) - return all_fields_l \ No newline at end of file + # def get_record_data_(self, obj): + # record_data = obj.record_data + # all_fields = RecordFormField.objects.filter(form=obj.form, is_deletd=False).order_by('sort') + # all_fields_l = RecordFormFieldSerializer(instance=all_fields, many=True).data + # for i in all_fields_l: + # key = i['field_key'] + # i['field_value'] = record_data.get(key, None) + # return all_fields_l \ No newline at end of file diff --git a/hb_server/apps/qm/views.py b/hb_server/apps/qm/views.py index e43ec38..229eef6 100644 --- a/hb_server/apps/qm/views.py +++ b/hb_server/apps/qm/views.py @@ -1,5 +1,5 @@ from apps.qm.serializers import StandardCreateUpdateSerializer, StandardSerializer, TestItemCreateUpdateSerializer, TestItemSerializer, TestRecordCreateSerializer, TestRecordDetailSerializer, TestRecordListSerializer -from apps.qm.models import Standard, TestItem, TestRecord +from apps.qm.models import Standard, TestItem, TestRecord, TestRecordItem from django.shortcuts import render from rest_framework.viewsets import ModelViewSet from apps.system.mixins import CreateUpdateModelAMixin @@ -57,7 +57,22 @@ class TestRecordViewSet(ModelViewSet): return super().get_serializer_class() def perform_create(self, serializer): + vdata = serializer.validated_data obj = serializer.save(create_by = self.request.user) + tris = [] + for m in vdata['record_data']: # 保存记录详情 + form_field = m['form_field'] + m['field_name'] = form_field.field_name + m['field_key'] = form_field.field_key + m['field_type'] = form_field.field_type + m['field_value'] = m['field_value'] + m['sort'] = form_field.sort + m['need_judge'] = form_field.need_judge + m['is_testok'] = m['is_testok'] if 'is_testok' in m else True + m['test_record'] = obj + tris.append(TestRecordItem(**m)) + TestRecordItem.objects.bulk_create(tris) + # 如果检测合格 if obj.fifo_item: obj.fifo_item.is_testok = True if obj.is_testok else False diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index 828ac89..ca82a2d 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -178,7 +178,7 @@ class DoFormSubmit(CreateAPIView, GenericAPIView): m['field_name'] = form_field.field_name m['field_key'] = form_field.field_key m['field_type'] = form_field.field_type - m['field_value'] = form_field.field_value + m['field_value'] = m['field_value'] m['sort'] = form_field.sort m['wproduct_record'] = wr wrds.append(WProductRecordItem(**m))