This commit is contained in:
Mohit Mittal 2017-03-03 23:39:25 +00:00 committed by GitHub
commit 5cbcb824f3
3 changed files with 18 additions and 6 deletions

View File

@ -310,7 +310,8 @@ class Field(object):
def __init__(self, read_only=False, write_only=False,
required=None, default=empty, initial=empty, source=None,
label=None, help_text=None, style=None,
error_messages=None, validators=None, allow_null=False):
error_messages=None, validators=None, allow_null=False,
permission=0, read_permission=0, write_permission=0):
self._creation_counter = Field._creation_counter
Field._creation_counter += 1
@ -334,6 +335,9 @@ class Field(object):
self.help_text = help_text
self.style = {} if style is None else style
self.allow_null = allow_null
self.permission = permission
self.read_permission = read_permission
self.write_permission = write_permission
if self.default_empty_html is not empty:
if default is not empty:
@ -443,8 +447,6 @@ class Field(object):
try:
return get_attribute(instance, self.source_attrs)
except (KeyError, AttributeError) as exc:
if not self.required and self.default is empty:
raise SkipField()
msg = (
'Got {exc_type} when attempting to get a value for field '
'`{field}` on serializer `{serializer}`.\nThe serializer '

View File

@ -136,12 +136,14 @@ class SimpleRouter(BaseRouter):
it from the viewset.
"""
queryset = getattr(viewset, 'queryset', None)
assert queryset is not None, '`base_name` argument not specified, and could ' \
model = getattr(viewset, 'model', None)
assert ((queryset is not None) or (model is not None)), '`base_name` argument not specified, and could ' \
'not automatically determine the name from the viewset, as ' \
'it does not have a `.queryset` attribute.'
return queryset.model._meta.object_name.lower()
model = model if model is not None else queryset.model
return model._meta.object_name.lower()
def get_routes(self, viewset):
"""

View File

@ -156,6 +156,14 @@ class BaseSerializer(Field):
list_serializer_class = getattr(meta, 'list_serializer_class', ListSerializer)
return list_serializer_class(*args, **list_kwargs)
'''
HACK to pass context down to child serializers in rippling.
The right way might be to remove @cached_property from fields.py
and set self._context here
'''
def set_context(self, context):
self.context = context;
def to_internal_value(self, data):
raise NotImplementedError('`to_internal_value()` must be implemented.')