diff --git a/hb_server/apps/inm/filters.py b/hb_server/apps/inm/filters.py index 73f92a6..41dcf61 100644 --- a/hb_server/apps/inm/filters.py +++ b/hb_server/apps/inm/filters.py @@ -15,7 +15,8 @@ class MbFilterSet(filters.FilterSet): def filter_tag(self, queryset, name, value): if value == 'expired': - queryset = queryset.exclude(expiration_date=None).filter(expiration_date__lte=timezone.now()) + queryset = queryset.exclude(expiration_date=None).filter( + expiration_date__lte=timezone.now()) return queryset diff --git a/hb_server/apps/system/filters.py b/hb_server/apps/system/filters.py index 2aa0dba..22ef179 100644 --- a/hb_server/apps/system/filters.py +++ b/hb_server/apps/system/filters.py @@ -5,15 +5,6 @@ from utils.mixins import DynamicFieldsFilterMixin class UserFilter(DynamicFieldsFilterMixin, filters.FilterSet): name = filters.CharFilter(field_name='name', lookup_expr='contains') - fields = filters.CharFilter(method='filter_fields') - omit = filters.CharFilter(method='filter_omit') class Meta: model = User - fields = ['name', 'is_active', 'fields'] - - def filter_fields(self, queryset, name, value): - return queryset - - - def filter_omit(self, queryset, name, value): - return queryset \ No newline at end of file + fields = ['name', 'is_active'] \ No newline at end of file diff --git a/hb_server/apps/system/serializers.py b/hb_server/apps/system/serializers.py index d74c8a2..1e397c5 100644 --- a/hb_server/apps/system/serializers.py +++ b/hb_server/apps/system/serializers.py @@ -5,7 +5,7 @@ from rest_framework import serializers from .models import (Dict, DictType, File, Organization, Permission, Position, Role, User) -from utils.mixins import DynamicFieldsMixin +from utils.mixins import DynamicFieldsSerializerMixin class IntervalSerializer(serializers.ModelSerializer): class Meta: @@ -133,7 +133,7 @@ class UserSimpleSerializer(serializers.ModelSerializer): # fields = ['id', 'username', 'name', 'is_active', 'dept_name', 'dept'] -class UserListSerializer(DynamicFieldsMixin, serializers.ModelSerializer): +class UserListSerializer(DynamicFieldsSerializerMixin, serializers.ModelSerializer): """ 用户列表序列化 """ diff --git a/hb_server/apps/wpm/filters.py b/hb_server/apps/wpm/filters.py index 54454f8..c4db494 100644 --- a/hb_server/apps/wpm/filters.py +++ b/hb_server/apps/wpm/filters.py @@ -2,6 +2,7 @@ from django_filters import rest_framework as filters from apps.mtm.models import Material, Step from apps.wpm.services import WpmServies +from utils.mixins import DynamicFieldsFilterMixin from .models import Operation, OperationMaterial, OperationRecord, WMaterial, WProduct @@ -28,11 +29,15 @@ class WMaterialFilterSet(filters.FilterSet): return queryset -class WProductFilterSet(filters.FilterSet): +class WProductFilterSet(DynamicFieldsFilterMixin, filters.FilterSet): tag = filters.CharFilter(method='filter_tag') production_plan = filters.NumberFilter( field_name='subproduction_plan__production_plan') + def filter_fields(self, queryset, name, value): + return queryset + def filter_omit(self, queryset, name, value): + return queryset class Meta: model = WProduct fields = ['step', 'subproduction_plan', 'material', diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index 9436243..cf7ca24 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -20,6 +20,7 @@ from apps.system.serializers import UserSimpleSerializer from apps.wpm.models import Operation, OperationEquip, OperationMaterial, OperationWproduct, Pick, WMaterial, WProduct, OperationRecord, OperationRecordItem, WprouctTicket from django.db import transaction from apps.sam.models import Order +from utils.mixins import DynamicFieldsSerializerMixin class PickHalfSerializer(serializers.Serializer): id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID') @@ -147,7 +148,7 @@ class WProductBaseSerializer(serializers.ModelSerializer): model = WProduct fields = '__all__' -class WProductListSerializer(serializers.ModelSerializer): +class WProductListSerializer(DynamicFieldsSerializerMixin, serializers.ModelSerializer): """ 半成品列表 """ diff --git a/hb_server/utils/mixins.py b/hb_server/utils/mixins.py index 7a37a3c..d62062d 100644 --- a/hb_server/utils/mixins.py +++ b/hb_server/utils/mixins.py @@ -7,10 +7,20 @@ from django_filters import rest_framework as filters # from django.conf import settings class DynamicFieldsFilterMixin(object): fields = filters.CharFilter(method='filter_fields') + omit = filters.CharFilter(method='filter_omit') def filter_fields(self, queryset, name, value): return queryset -class DynamicFieldsMixin(object): + def filter_omit(self, queryset, name, value): + return queryset + + @property + def fields(self): + fields = super(DynamicFieldsFilterMixin, self).fields + fields.extend(['fields', 'omit']) + return fields + +class DynamicFieldsSerializerMixin(object): """ A serializer mixin that takes an additional `fields` argument that controls which fields should be displayed. @@ -24,7 +34,7 @@ class DynamicFieldsMixin(object): passing `fields` will pass all fields individual fields are comma separated (?fields=id,name,url,email). """ - fields = super(DynamicFieldsMixin, self).fields + fields = super(DynamicFieldsSerializerMixin, self).fields if not hasattr(self, '_context'): # We are being called before a request cycle