diff --git a/apps/mtm/migrations/0054_process_parent.py b/apps/mtm/migrations/0054_process_parent.py new file mode 100644 index 00000000..c6f0dee3 --- /dev/null +++ b/apps/mtm/migrations/0054_process_parent.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2025-03-21 08:29 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0053_mgroup_mtype'), + ] + + operations = [ + migrations.AddField( + model_name='process', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.process', verbose_name='父工序'), + ), + ] diff --git a/apps/mtm/models.py b/apps/mtm/models.py index 59f4217d..f0b042fa 100644 --- a/apps/mtm/models.py +++ b/apps/mtm/models.py @@ -27,6 +27,7 @@ class Process(CommonBModel): batch_append_equip = models.BooleanField('批号追加设备', default=False) mlog_need_ticket = models.BooleanField('日志提交是否需要审批', default=False) mstate_json = models.JSONField('中间状态', default=list, blank=True) + parent = models.ForeignKey('self', verbose_name='父工序', on_delete=models.CASCADE, null=True, blank=True) class Meta: verbose_name = '工序' diff --git a/apps/mtm/serializers.py b/apps/mtm/serializers.py index 5f70c52b..12acc89c 100644 --- a/apps/mtm/serializers.py +++ b/apps/mtm/serializers.py @@ -178,6 +178,8 @@ class RouteSerializer(CustomModelSerializer): process: Process = attrs.get('process', None) if process is None: raise ParseError('未提供操作工序') + if process.parent is not None: + raise ParseError('操作工序不可为子工序') if process.mtype == Process.PRO_DIV and attrs.get('div_number', 1) <= 1: raise ParseError('切分数量必须大于1') return super().validate(attrs) diff --git a/apps/mtm/views.py b/apps/mtm/views.py index 47c5c2d2..19019251 100644 --- a/apps/mtm/views.py +++ b/apps/mtm/views.py @@ -190,7 +190,10 @@ class ProcessViewSet(CustomModelViewSet): serializer_class = ProcessSerializer select_related_fields = ['belong_dept'] search_fields = ['name', 'cate'] - filterset_fields = ['cate'] + filterset_fields = { + "cate": ['exact'], + "parent": ['isnull'] + } ordering = ['sort', 'create_time'] def perform_destroy(self, instance):