From 3fd0347837e54c439074a7294d36e3472e83ef70 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 20 Oct 2023 09:24:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0utask=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/pm/filters.py | 23 +++++++++++++++++++- apps/pm/migrations/0008_alter_mtask_utask.py | 19 ++++++++++++++++ apps/pm/models.py | 2 +- apps/pm/views.py | 4 ++-- 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 apps/pm/migrations/0008_alter_mtask_utask.py diff --git a/apps/pm/filters.py b/apps/pm/filters.py index 038de12c..a9734104 100644 --- a/apps/pm/filters.py +++ b/apps/pm/filters.py @@ -1,10 +1,31 @@ from django_filters import rest_framework as filters -from apps.pm.models import Mtask +from apps.pm.models import Mtask, Utask from django.utils import timezone from datetime import datetime, timedelta from django.db.models import F +class UtaskFilter(filters.FilterSet): + + class Meta: + model = Utask + fields = { + "state": ["exact", "in"], + "start_date": ["exact", "gte", "lte"], + "end_date": ["exact", "gte", "lte"], + "material": ["exact"], + "material__type": ["exact"], + "material__is_hidden": ["exact"], + "mtask_utask__mgroup": ["exact"], + "mtask_utask__mgroup__belong_dept": ['exact'], + "mtask_utask__mgroup__belong_dept__name": ['exact'] + } + + def filter_queryset(self, queryset): + queryset = super().filter_queryset(queryset) + return queryset.distinct() + + class MtaskFilter(filters.FilterSet): tag = filters.CharFilter(method='filter_tag') diff --git a/apps/pm/migrations/0008_alter_mtask_utask.py b/apps/pm/migrations/0008_alter_mtask_utask.py new file mode 100644 index 00000000..8c44c0b5 --- /dev/null +++ b/apps/pm/migrations/0008_alter_mtask_utask.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2023-10-20 01:17 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('pm', '0007_auto_20231019_1812'), + ] + + operations = [ + migrations.AlterField( + model_name='mtask', + name='utask', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='mtask_utask', to='pm.utask', verbose_name='关联大任务'), + ), + ] diff --git a/apps/pm/models.py b/apps/pm/models.py index 1053bf8b..1b8785cf 100644 --- a/apps/pm/models.py +++ b/apps/pm/models.py @@ -62,4 +62,4 @@ class Mtask(CommonADModel): start_date = models.DateField('计划开工日期') end_date = models.DateField('计划完工日期') utask = models.ForeignKey( - Utask, verbose_name='关联大任务', on_delete=models.CASCADE, null=True, blank=True) + Utask, verbose_name='关联大任务', on_delete=models.CASCADE, null=True, blank=True, related_name='mtask_utask') diff --git a/apps/pm/views.py b/apps/pm/views.py index 5b40063a..56afac67 100644 --- a/apps/pm/views.py +++ b/apps/pm/views.py @@ -6,7 +6,7 @@ from rest_framework.response import Response from apps.utils.serializers import PkSerializer from apps.utils.viewsets import CustomModelViewSet -from .filters import MtaskFilter +from .filters import MtaskFilter, UtaskFilter from .models import Mtask, Utask from .serializers import MtaskSerializer, SchedueSerializer, UtaskSerializer from .services import PmService @@ -22,7 +22,7 @@ class UtaskViewSet(CustomModelViewSet): """ queryset = Utask.objects.all() serializer_class = UtaskSerializer - filterset_fields = ['material', 'state'] + filterset_class = UtaskFilter select_related_fields = ['material'] ordering = ['-start_date']