drf动态字段mixins
This commit is contained in:
parent
eaa6da6a4f
commit
ceb0fe2354
|
@ -3,9 +3,11 @@ from .models import User
|
|||
|
||||
|
||||
class UserFilter(filters.FilterSet):
|
||||
name = filters.CharFilter(field_name='name', lookup_expr='contains')
|
||||
fields = filters.CharFilter(method='filter_fields')
|
||||
class Meta:
|
||||
model = User
|
||||
fields = {
|
||||
'name': ['exact', 'contains'],
|
||||
'is_active': ['exact'],
|
||||
}
|
||||
fields = ['name', 'is_active', 'fields']
|
||||
|
||||
def filter_fields(self, queryset, name, value):
|
||||
return queryset
|
|
@ -5,6 +5,7 @@ from rest_framework import serializers
|
|||
|
||||
from .models import (Dict, DictType, File, Organization, Permission, Position,
|
||||
Role, User)
|
||||
from utils.mixins import DynamicFieldsMixin
|
||||
|
||||
class IntervalSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
|
@ -132,7 +133,7 @@ class UserSimpleSerializer(serializers.ModelSerializer):
|
|||
# fields = ['id', 'username', 'name', 'is_active', 'dept_name', 'dept']
|
||||
|
||||
|
||||
class UserListSerializer(serializers.ModelSerializer):
|
||||
class UserListSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
|
||||
"""
|
||||
用户列表序列化
|
||||
"""
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
"""
|
||||
Mixin to dynamically select only a subset of fields per DRF resource.
|
||||
"""
|
||||
import warnings
|
||||
# import warnings
|
||||
|
||||
from django.conf import settings
|
||||
# from django.conf import settings
|
||||
|
||||
|
||||
class DynamicFieldsMixin(object):
|
||||
|
@ -36,10 +36,10 @@ class DynamicFieldsMixin(object):
|
|||
try:
|
||||
request = self.context['request']
|
||||
except KeyError:
|
||||
conf = getattr(settings, 'DRF_DYNAMIC_FIELDS', {})
|
||||
if not conf.get('SUPPRESS_CONTEXT_WARNING', False) is True:
|
||||
warnings.warn('Context does not have access to request. '
|
||||
'See README for more information.')
|
||||
# conf = getattr(settings, 'DRF_DYNAMIC_FIELDS', {})
|
||||
# if not conf.get('SUPPRESS_CONTEXT_WARNING', False) is True:
|
||||
# warnings.warn('Context does not have access to request. '
|
||||
# 'See README for more information.')
|
||||
return fields
|
||||
|
||||
# NOTE: drf test framework builds a request object where the query
|
||||
|
@ -47,8 +47,8 @@ class DynamicFieldsMixin(object):
|
|||
params = getattr(
|
||||
request, 'query_params', getattr(request, 'GET', None)
|
||||
)
|
||||
if params is None:
|
||||
warnings.warn('Request object does not contain query paramters')
|
||||
# if params is None:
|
||||
# warnings.warn('Request object does not contain query paramters')
|
||||
|
||||
try:
|
||||
filter_fields = params.get('fields', None).split(',')
|
||||
|
|
Loading…
Reference in New Issue