From b8cf7485f18cd01431bf9374efb9fa236ac3582b Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 12 Apr 2021 10:32:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A1=E6=9F=A5=E4=BB=BB=E5=8A=A1model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._inspecttask_inspectteam_subinspecttask.py | 69 +++++++++++++++++++ server/apps/quality/models.py | 41 +++++++++-- server/apps/quality/serializers.py | 7 ++ server/apps/quality/urls.py | 4 +- server/apps/quality/views.py | 11 ++- 5 files changed, 125 insertions(+), 7 deletions(-) create mode 100644 server/apps/quality/migrations/0002_inspecttask_inspectteam_subinspecttask.py diff --git a/server/apps/quality/migrations/0002_inspecttask_inspectteam_subinspecttask.py b/server/apps/quality/migrations/0002_inspecttask_inspectteam_subinspecttask.py new file mode 100644 index 0000000..71bd890 --- /dev/null +++ b/server/apps/quality/migrations/0002_inspecttask_inspectteam_subinspecttask.py @@ -0,0 +1,69 @@ +# Generated by Django 3.0.5 on 2021-04-12 02:32 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('quality', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='SubInspectTask', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=100, verbose_name='子任务名')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subinspecttask_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subinspecttask_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '巡查子任务', + 'verbose_name_plural': '巡查子任务', + }, + ), + migrations.CreateModel( + name='InspectTeam', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('type', models.CharField(choices=[('组长', '组长'), ('组员', '组员')], default='组员', max_length=50, verbose_name='成员类型')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inspectteam_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='成员')), + ('subtask', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quality.SubInspectTask', verbose_name='关联子任务')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inspectteam_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '巡查子任务', + 'verbose_name_plural': '巡查子任务', + }, + ), + migrations.CreateModel( + name='InspectTask', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=100, verbose_name='任务名')), + ('start_date', models.DateField(verbose_name='巡查开始日期')), + ('end_date', models.DateField(verbose_name='巡查结束日期')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inspecttask_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inspecttask_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '巡查任务', + 'verbose_name_plural': '巡查任务', + }, + ), + ] diff --git a/server/apps/quality/models.py b/server/apps/quality/models.py index 01f117b..5d19ee1 100644 --- a/server/apps/quality/models.py +++ b/server/apps/quality/models.py @@ -21,7 +21,40 @@ class InspectItem(CommonAModel): verbose_name = '检查清单' verbose_name_plural = verbose_name -# class InspectTask(CommonAModel): -# """ -# 巡查任务 -# """ \ No newline at end of file +class InspectTask(CommonAModel): + """ + 巡查任务 + """ + name = models.CharField('任务名', max_length=100) + start_date = models.DateField('巡查开始日期') + end_date = models.DateField('巡查结束日期') + + class Meta: + verbose_name = '巡查任务' + verbose_name_plural = verbose_name + +class SubInspectTask(CommonAModel): + """ + 巡查子任务 + """ + name = models.CharField('子任务名', max_length=100) + + class Meta: + verbose_name = '巡查子任务' + verbose_name_plural = verbose_name + +class InspectTeam(CommonAModel): + """ + 巡查组构成 + """ + type_choices = ( + ('组长', '组长'), + ('组员', '组员'), + ) + member = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='成员') + type = models.CharField('成员类型', max_length=50, choices=type_choices, default='组员') + subtask = models.ForeignKey(SubInspectTask, on_delete=models.CASCADE, verbose_name='关联子任务') + + class Meta: + verbose_name = '巡查子任务' + verbose_name_plural = verbose_name diff --git a/server/apps/quality/serializers.py b/server/apps/quality/serializers.py index d6e095b..7ab15fa 100644 --- a/server/apps/quality/serializers.py +++ b/server/apps/quality/serializers.py @@ -14,3 +14,10 @@ class InspectItemSerializer(serializers.ModelSerializer): def setup_eager_loading(queryset): queryset = queryset.select_related('cate') return queryset + +class InspectTaskSerializer(serializers.ModelSerializer): + create_by_ = UserSimpleSerializer(source='create_by', read_only=True) + + class Meta: + model = InspectTask + fields = '__all__' \ No newline at end of file diff --git a/server/apps/quality/urls.py b/server/apps/quality/urls.py index 33b2842..f9b66e1 100644 --- a/server/apps/quality/urls.py +++ b/server/apps/quality/urls.py @@ -1,10 +1,10 @@ from django.urls import path, include from rest_framework import routers -from .views import InspectItemViewSet +from .views import InspectItemViewSet, InspectTaskViewSet router = routers.DefaultRouter() router.register('inspectitem', InspectItemViewSet, basename="inspectitem") - +router.register('inspecttask', InspectTaskViewSet, basename="inspecttask") urlpatterns = [ path('', include(router.urls)) ] \ No newline at end of file diff --git a/server/apps/quality/views.py b/server/apps/quality/views.py index 2c480a4..9668bfc 100644 --- a/server/apps/quality/views.py +++ b/server/apps/quality/views.py @@ -6,7 +6,7 @@ from django.shortcuts import render from django.utils import timezone from rest_framework import status from rest_framework.decorators import action, permission_classes -from rest_framework.mixins import ListModelMixin +from rest_framework.mixins import ListModelMixin, RetrieveModelMixin from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet, ModelViewSet from utils.pagination import PageOrNot @@ -33,3 +33,12 @@ class InspectItemViewSet(CreateUpdateCustomMixin, ModelViewSet): search_fields = ['name', 'require'] filterset_fields = ['type','cate'] ordering = ['sortnum', 'cate__sort', 'create_time'] + + +class InspectTaskViewSet(CreateUpdateCustomMixin, ListModelMixin, RetrieveModelMixin, GenericViewSet): + perms_map = {'get': '*', 'post': 'inspecttask_create', + 'put': 'inspecttask_update', 'delete': 'inspecttask_delete'} + queryset = InspectTask.objects.all() + serializer_class = InspectTaskSerializer + search_fields = ['name'] + ordering = ['-create_time'] \ No newline at end of file