diff options
| author | Tom Christie | 2014-11-05 15:23:13 +0000 |
|---|---|---|
| committer | Tom Christie | 2014-11-05 15:23:13 +0000 |
| commit | 49fae230005bba4607f425d90de77363d6b8659e (patch) | |
| tree | 5152a29e89980bb58cb45059df4f54e12a6df412 /rest_framework | |
| parent | d048d32876e4a2f4acb6848b809097b9b9d48e50 (diff) | |
| download | django-rest-framework-49fae230005bba4607f425d90de77363d6b8659e.tar.bz2 | |
Pass through kwargs to both Serializer and ListSerializer
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/relations.py | 14 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 14 |
2 files changed, 21 insertions, 7 deletions
diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 1665dd35..f6ae30d0 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -13,6 +13,11 @@ class PKOnlyObject(object): def __init__(self, pk): self.pk = pk +MANY_RELATION_KWARGS = ( + 'read_only', 'write_only', 'required', 'default', 'initial', 'source', + 'label', 'help_text', 'style', 'error_messages' +) + class RelatedField(Field): def __init__(self, **kwargs): @@ -31,10 +36,11 @@ class RelatedField(Field): # We override this method in order to automagically create # `ManyRelation` classes instead when `many=True` is set. if kwargs.pop('many', False): - return ManyRelation( - child_relation=cls(*args, **kwargs), - read_only=kwargs.get('read_only', False) - ) + list_kwargs = {'child_relation': cls(*args, **kwargs)} + for key in kwargs.keys(): + if key in MANY_RELATION_KWARGS: + list_kwargs[key] = kwargs[key] + return ManyRelation(**list_kwargs) return super(RelatedField, cls).__new__(cls, *args, **kwargs) def run_validation(self, data=empty): diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 9e5d0cab..dfac75fc 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -43,6 +43,12 @@ import warnings from rest_framework.relations 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 # -------------- @@ -52,7 +58,6 @@ class BaseSerializer(Field): The BaseSerializer class provides a minimal class which may be used for writing custom serializer implementations. """ - def __init__(self, instance=None, data=None, **kwargs): self.instance = instance self._initial_data = data @@ -65,8 +70,11 @@ class BaseSerializer(Field): # We override this method in order to automagically create # `ListSerializer` classes instead when `many=True` is set. if kwargs.pop('many', False): - kwargs['child'] = cls() - return ListSerializer(*args, **kwargs) + list_kwargs = {'child': cls(*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) def to_internal_value(self, data): |
