diff options
| author | Tom Christie | 2013-01-30 13:41:56 +0000 |
|---|---|---|
| committer | Tom Christie | 2013-01-30 13:41:56 +0000 |
| commit | be6df3ae3ce18bf4b55ae065ebd34198885e48df (patch) | |
| tree | 3a96bb6a5075584add7e28c6d8d7f251ad785b4e /rest_framework/relations.py | |
| parent | 9a4d01d687d57601d37f9a930d37039cb9f6a6f2 (diff) | |
| parent | 8021bb5d5089955b171173e60dcc0968e13d29ea (diff) | |
| download | django-rest-framework-be6df3ae3ce18bf4b55ae065ebd34198885e48df.tar.bz2 | |
Merge branch 'master' into many-fields
Conflicts:
rest_framework/relations.py
Diffstat (limited to 'rest_framework/relations.py')
| -rw-r--r-- | rest_framework/relations.py | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/rest_framework/relations.py b/rest_framework/relations.py index aee43206..221c72fb 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -17,8 +17,7 @@ class RelatedField(WritableField): """ Base class for related model fields. - If not overridden, this represents a to-one relationship, using the unicode - representation of the target. + This represents a relationship using the unicode representation of the target. """ widget = widgets.Select many_widget = widgets.SelectMultiple @@ -31,13 +30,18 @@ class RelatedField(WritableField): many = False def __init__(self, *args, **kwargs): + + # 'null' will be deprecated in favor of 'required' + if 'null' in kwargs: + kwargs['required'] = not kwargs.pop('null') + self.queryset = kwargs.pop('queryset', None) - self.null = kwargs.pop('null', False) self.many = kwargs.pop('many', self.many) super(RelatedField, self).__init__(*args, **kwargs) self.read_only = kwargs.pop('read_only', self.default_read_only) if self.many: self.widget = self.many_widget + self.form_field_class = self.many_form_field_class def initialize(self, parent, field_name): super(RelatedField, self).initialize(parent, field_name) @@ -56,11 +60,6 @@ class RelatedField(WritableField): ### We need this stuff to make form choices work... - # def __deepcopy__(self, memo): - # result = super(RelatedField, self).__deepcopy__(memo) - # result.queryset = result.queryset - # return result - def prepare_value(self, obj): return self.to_native(obj) @@ -138,13 +137,13 @@ class RelatedField(WritableField): else: value = data[field_name] except KeyError: - if self.required: - raise ValidationError(self.error_messages['required']) - return + if self.partial: + return + value = [] if self.many else None - if value in (None, '') and not self.null: - raise ValidationError('Value may not be null') - elif value in (None, '') and self.null: + if value in (None, '') and self.required: + raise ValidationError(self.error_messages['required']) + elif value in (None, ''): into[(self.source or field_name)] = None elif self.many: into[(self.source or field_name)] = [self.from_native(item) for item in value] @@ -156,7 +155,7 @@ class RelatedField(WritableField): class PrimaryKeyRelatedField(RelatedField): """ - Represents a to-one relationship as a pk value. + Represents a relationship as a pk value. """ default_read_only = False @@ -229,6 +228,9 @@ class PrimaryKeyRelatedField(RelatedField): class SlugRelatedField(RelatedField): + """ + Represents a relationship using a unique field on the target. + """ default_read_only = False default_error_messages = { @@ -262,7 +264,7 @@ class SlugRelatedField(RelatedField): class HyperlinkedRelatedField(RelatedField): """ - Represents a to-one relationship, using hyperlinking. + Represents a relationship using hyperlinking. """ pk_url_kwarg = 'pk' slug_field = 'slug' |
