diff --git a/apps/sam/filters.py b/apps/sam/filters.py new file mode 100644 index 00000000..263e958d --- /dev/null +++ b/apps/sam/filters.py @@ -0,0 +1,13 @@ +from django_filters import rest_framework as filters +from apps.sam.models import OrderItem + + +class OrderItemFilter(filters.FilterSet): + + class Meta: + model = OrderItem + fields = { + "order": ["exact", "in"], + "order__state": ["exact", "in"], + "mtask": ["exact", "isnull"] + } diff --git a/apps/sam/serializers.py b/apps/sam/serializers.py index 1830ec4c..08d8143a 100644 --- a/apps/sam/serializers.py +++ b/apps/sam/serializers.py @@ -14,6 +14,11 @@ class CustomerSerializer(CustomModelSerializer): class ContractSerializer(CustomModelSerializer): + customer_name = serializers.CharField( + source='customer.name', read_only=True) + create_by_name = serializers.CharField( + source='create_by.name', read_only=True) + class Meta: model = Contract fields = '__all__' diff --git a/apps/sam/views.py b/apps/sam/views.py index 8eff10b1..e10abdc9 100644 --- a/apps/sam/views.py +++ b/apps/sam/views.py @@ -11,6 +11,7 @@ from rest_framework import serializers from rest_framework.exceptions import PermissionDenied from django.utils import timezone from rest_framework.response import Response +from .filters import OrderItemFilter # Create your views here. @@ -38,7 +39,7 @@ class ContractViewSet(CustomModelViewSet): """ queryset = Contract.objects.all() serializer_class = ContractSerializer - select_related_fields = ['customer'] + select_related_fields = ['customer', 'create_by'] search_fields = ['name', 'number'] filterset_fields = ['customer'] @@ -88,5 +89,10 @@ class OrderItemViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, Cust queryset = OrderItem.objects.all() serializer_class = OrderItemSerializer select_related_fields = ['order', 'material'] - filterset_fields = ['order', 'material', 'mtask'] + filterset_class = OrderItemFilter ordering = ['create_time'] + + def perform_destroy(self, instance): + if instance.order.state != Order.ORDER_CREATE: + raise ParseError('该订单状态下不可删除') + return super().perform_destroy(instance)