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):
|
def filter_tag(self, queryset, name, value):
|
||||||
if value == 'expired':
|
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
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,15 +5,6 @@ from utils.mixins import DynamicFieldsFilterMixin
|
||||||
|
|
||||||
class UserFilter(DynamicFieldsFilterMixin, filters.FilterSet):
|
class UserFilter(DynamicFieldsFilterMixin, filters.FilterSet):
|
||||||
name = filters.CharFilter(field_name='name', lookup_expr='contains')
|
name = filters.CharFilter(field_name='name', lookup_expr='contains')
|
||||||
fields = filters.CharFilter(method='filter_fields')
|
|
||||||
omit = filters.CharFilter(method='filter_omit')
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ['name', 'is_active', 'fields']
|
fields = ['name', 'is_active']
|
||||||
|
|
||||||
def filter_fields(self, queryset, name, value):
|
|
||||||
return queryset
|
|
||||||
|
|
||||||
|
|
||||||
def filter_omit(self, queryset, name, value):
|
|
||||||
return queryset
|
|
|
@ -5,7 +5,7 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from .models import (Dict, DictType, File, Organization, Permission, Position,
|
from .models import (Dict, DictType, File, Organization, Permission, Position,
|
||||||
Role, User)
|
Role, User)
|
||||||
from utils.mixins import DynamicFieldsMixin
|
from utils.mixins import DynamicFieldsSerializerMixin
|
||||||
|
|
||||||
class IntervalSerializer(serializers.ModelSerializer):
|
class IntervalSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -133,7 +133,7 @@ class UserSimpleSerializer(serializers.ModelSerializer):
|
||||||
# fields = ['id', 'username', 'name', 'is_active', 'dept_name', 'dept']
|
# 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.mtm.models import Material, Step
|
||||||
|
|
||||||
from apps.wpm.services import WpmServies
|
from apps.wpm.services import WpmServies
|
||||||
|
from utils.mixins import DynamicFieldsFilterMixin
|
||||||
from .models import Operation, OperationMaterial, OperationRecord, WMaterial, WProduct
|
from .models import Operation, OperationMaterial, OperationRecord, WMaterial, WProduct
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,11 +29,15 @@ class WMaterialFilterSet(filters.FilterSet):
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class WProductFilterSet(filters.FilterSet):
|
class WProductFilterSet(DynamicFieldsFilterMixin, filters.FilterSet):
|
||||||
tag = filters.CharFilter(method='filter_tag')
|
tag = filters.CharFilter(method='filter_tag')
|
||||||
production_plan = filters.NumberFilter(
|
production_plan = filters.NumberFilter(
|
||||||
field_name='subproduction_plan__production_plan')
|
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:
|
class Meta:
|
||||||
model = WProduct
|
model = WProduct
|
||||||
fields = ['step', 'subproduction_plan', 'material',
|
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 apps.wpm.models import Operation, OperationEquip, OperationMaterial, OperationWproduct, Pick, WMaterial, WProduct, OperationRecord, OperationRecordItem, WprouctTicket
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from apps.sam.models import Order
|
from apps.sam.models import Order
|
||||||
|
from utils.mixins import DynamicFieldsSerializerMixin
|
||||||
|
|
||||||
class PickHalfSerializer(serializers.Serializer):
|
class PickHalfSerializer(serializers.Serializer):
|
||||||
id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID')
|
id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID')
|
||||||
|
@ -147,7 +148,7 @@ class WProductBaseSerializer(serializers.ModelSerializer):
|
||||||
model = WProduct
|
model = WProduct
|
||||||
fields = '__all__'
|
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
|
# from django.conf import settings
|
||||||
class DynamicFieldsFilterMixin(object):
|
class DynamicFieldsFilterMixin(object):
|
||||||
fields = filters.CharFilter(method='filter_fields')
|
fields = filters.CharFilter(method='filter_fields')
|
||||||
|
omit = filters.CharFilter(method='filter_omit')
|
||||||
def filter_fields(self, queryset, name, value):
|
def filter_fields(self, queryset, name, value):
|
||||||
return queryset
|
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
|
A serializer mixin that takes an additional `fields` argument that controls
|
||||||
which fields should be displayed.
|
which fields should be displayed.
|
||||||
|
@ -24,7 +34,7 @@ class DynamicFieldsMixin(object):
|
||||||
passing `fields` will pass all fields individual fields are comma
|
passing `fields` will pass all fields individual fields are comma
|
||||||
separated (?fields=id,name,url,email).
|
separated (?fields=id,name,url,email).
|
||||||
"""
|
"""
|
||||||
fields = super(DynamicFieldsMixin, self).fields
|
fields = super(DynamicFieldsSerializerMixin, self).fields
|
||||||
|
|
||||||
if not hasattr(self, '_context'):
|
if not hasattr(self, '_context'):
|
||||||
# We are being called before a request cycle
|
# We are being called before a request cycle
|
||||||
|
|
Loading…
Reference in New Issue