drf 动态字段 mixins
This commit is contained in:
parent
f6a7ada99f
commit
efc101d2a1
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
fields = ['name', 'is_active']
|
|
@ -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):
|
||||
"""
|
||||
用户列表序列化
|
||||
"""
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
半成品列表
|
||||
"""
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue