mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 13:00:12 +03:00
rework Field.__init__ to use either kwargs / class attrs.
Precedence is given to kwargs over class attributes. You can create a subclass of a Field for 99% of your use cases while still needing a one-off instance where you need to change an attribute; hence kwargs is still useful. Other important point is that kwargs is the current de-facto standard for declaring fields in a serializer.
This commit is contained in:
parent
4881126544
commit
5a899aea1a
|
@ -154,28 +154,40 @@ class Field(object):
|
|||
}
|
||||
default_validators = []
|
||||
default_empty_html = empty
|
||||
initial = None
|
||||
|
||||
# allows to subclass a Field and have defaults on the class.
|
||||
# allows subclasses to change defaults
|
||||
read_only = False
|
||||
write_only = False
|
||||
required = None
|
||||
default = empty
|
||||
initial = None
|
||||
source = None
|
||||
label = None
|
||||
help_text = None
|
||||
style = None
|
||||
error_messages = None
|
||||
validators = None
|
||||
allow_null = False
|
||||
|
||||
def __init__(self, read_only=None, write_only=None,
|
||||
required=None, default=empty, initial=empty, source=None,
|
||||
label=None, help_text=None, style=None,
|
||||
error_messages=None, validators=None, allow_null=None):
|
||||
def __init__(self, **kwargs):
|
||||
self._creation_counter = Field._creation_counter
|
||||
Field._creation_counter += 1
|
||||
|
||||
if read_only is None:
|
||||
read_only = self.read_only
|
||||
|
||||
if write_only is None:
|
||||
write_only = self.write_only
|
||||
|
||||
if allow_null is None:
|
||||
allow_null = self.allow_null
|
||||
# precedence is given to kwargs over class attributes.
|
||||
# you can create a subclass of a Field for maximum reuse while still
|
||||
# needing a one-off instance where you need to change an attribute.
|
||||
read_only = kwargs.pop('read_only', self.read_only)
|
||||
write_only = kwargs.pop('write_only', self.write_only)
|
||||
required = kwargs.pop('required', self.required)
|
||||
default = kwargs.pop('default', self.default)
|
||||
initial = kwargs.pop('initial', self.initial)
|
||||
source = kwargs.pop('source', self.source)
|
||||
label = kwargs.pop('label', self.label)
|
||||
help_text = kwargs.pop('help_text', self.help_text)
|
||||
style = kwargs.pop('style', self.style)
|
||||
error_messages = kwargs.pop('error_messages', self.error_messages)
|
||||
validators = kwargs.pop('validators', self.validators)
|
||||
allow_null = kwargs.pop('allow_null', self.allow_null)
|
||||
|
||||
# If `required` is unset, then use `True` unless a default is provided.
|
||||
if required is None:
|
||||
|
@ -192,7 +204,7 @@ class Field(object):
|
|||
self.required = required
|
||||
self.default = default
|
||||
self.source = source
|
||||
self.initial = self.initial if (initial is empty) else initial
|
||||
self.initial = initial
|
||||
self.label = label
|
||||
self.help_text = help_text
|
||||
self.style = {} if style is None else style
|
||||
|
|
Loading…
Reference in New Issue
Block a user