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