mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-23 01:57:00 +03:00
Pass through kwargs to both Serializer and ListSerializer
This commit is contained in:
parent
d048d32876
commit
49fae23000
|
@ -13,6 +13,11 @@ class PKOnlyObject(object):
|
||||||
def __init__(self, pk):
|
def __init__(self, pk):
|
||||||
self.pk = pk
|
self.pk = pk
|
||||||
|
|
||||||
|
MANY_RELATION_KWARGS = (
|
||||||
|
'read_only', 'write_only', 'required', 'default', 'initial', 'source',
|
||||||
|
'label', 'help_text', 'style', 'error_messages'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class RelatedField(Field):
|
class RelatedField(Field):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
@ -31,10 +36,11 @@ class RelatedField(Field):
|
||||||
# We override this method in order to automagically create
|
# We override this method in order to automagically create
|
||||||
# `ManyRelation` classes instead when `many=True` is set.
|
# `ManyRelation` classes instead when `many=True` is set.
|
||||||
if kwargs.pop('many', False):
|
if kwargs.pop('many', False):
|
||||||
return ManyRelation(
|
list_kwargs = {'child_relation': cls(*args, **kwargs)}
|
||||||
child_relation=cls(*args, **kwargs),
|
for key in kwargs.keys():
|
||||||
read_only=kwargs.get('read_only', False)
|
if key in MANY_RELATION_KWARGS:
|
||||||
)
|
list_kwargs[key] = kwargs[key]
|
||||||
|
return ManyRelation(**list_kwargs)
|
||||||
return super(RelatedField, cls).__new__(cls, *args, **kwargs)
|
return super(RelatedField, cls).__new__(cls, *args, **kwargs)
|
||||||
|
|
||||||
def run_validation(self, data=empty):
|
def run_validation(self, data=empty):
|
||||||
|
|
|
@ -43,6 +43,12 @@ import warnings
|
||||||
from rest_framework.relations import * # NOQA
|
from rest_framework.relations import * # NOQA
|
||||||
from rest_framework.fields import * # NOQA
|
from rest_framework.fields import * # NOQA
|
||||||
|
|
||||||
|
LIST_SERIALIZER_KWARGS = (
|
||||||
|
'read_only', 'write_only', 'required', 'default', 'initial', 'source',
|
||||||
|
'label', 'help_text', 'style', 'error_messages',
|
||||||
|
'instance', 'data', 'partial', 'context'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# BaseSerializer
|
# BaseSerializer
|
||||||
# --------------
|
# --------------
|
||||||
|
@ -52,7 +58,6 @@ class BaseSerializer(Field):
|
||||||
The BaseSerializer class provides a minimal class which may be used
|
The BaseSerializer class provides a minimal class which may be used
|
||||||
for writing custom serializer implementations.
|
for writing custom serializer implementations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, instance=None, data=None, **kwargs):
|
def __init__(self, instance=None, data=None, **kwargs):
|
||||||
self.instance = instance
|
self.instance = instance
|
||||||
self._initial_data = data
|
self._initial_data = data
|
||||||
|
@ -65,8 +70,11 @@ class BaseSerializer(Field):
|
||||||
# We override this method in order to automagically create
|
# We override this method in order to automagically create
|
||||||
# `ListSerializer` classes instead when `many=True` is set.
|
# `ListSerializer` classes instead when `many=True` is set.
|
||||||
if kwargs.pop('many', False):
|
if kwargs.pop('many', False):
|
||||||
kwargs['child'] = cls()
|
list_kwargs = {'child': cls(*args, **kwargs)}
|
||||||
return ListSerializer(*args, **kwargs)
|
for key in kwargs.keys():
|
||||||
|
if key in LIST_SERIALIZER_KWARGS:
|
||||||
|
list_kwargs[key] = kwargs[key]
|
||||||
|
return ListSerializer(*args, **list_kwargs)
|
||||||
return super(BaseSerializer, cls).__new__(cls, *args, **kwargs)
|
return super(BaseSerializer, cls).__new__(cls, *args, **kwargs)
|
||||||
|
|
||||||
def to_internal_value(self, data):
|
def to_internal_value(self, data):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user