diff options
| author | Mark Aaron Shirley | 2013-01-16 16:03:59 -0800 |
|---|---|---|
| committer | Mark Aaron Shirley | 2013-01-16 16:04:20 -0800 |
| commit | 221f7326c7db7b6fa1a9ba2f0181ac075e3b482c (patch) | |
| tree | 18ddf4611639aae33b72ffd7952f9692ec78bf6f /rest_framework/serializers.py | |
| parent | 34e14b01e402a2b2bcaf57aab76397757e260fd6 (diff) | |
| download | django-rest-framework-221f7326c7db7b6fa1a9ba2f0181ac075e3b482c.tar.bz2 | |
Use None to delete nested object as opposed to _delete flag
Diffstat (limited to 'rest_framework/serializers.py')
| -rw-r--r-- | rest_framework/serializers.py | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 83bf1bc3..a84370e9 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -107,7 +107,6 @@ class BaseSerializer(WritableField): self.parent = None self.root = None self.partial = partial - self.delete = False self.context = context or {} @@ -119,6 +118,7 @@ class BaseSerializer(WritableField): self._data = None self._files = None self._errors = None + self._delete = False ##### # Methods to determine which fields to use when (de)serializing objects. @@ -378,7 +378,7 @@ class ModelSerializer(Serializer): return try: - native = data[field_name] + value = data[field_name] except KeyError: if self.required: raise ValidationError(self.error_messages['required']) @@ -387,19 +387,20 @@ class ModelSerializer(Serializer): if self.parent.object: # Set the serializer object if it exists pk_field_name = self.opts.model._meta.pk.name - pk_val = native.get(pk_field_name) obj = getattr(self.parent.object, field_name) - if obj and (getattr(obj, pk_field_name) == pk_val): - self.object = obj - self.delete = native.get('_delete') - - obj = self.from_native(native, files) - if not self._errors: self.object = obj - into[self.source or field_name] = self + + if value in (None, ''): + self._delete = True + into[(self.source or field_name)] = self else: - # Propagate errors up to our parent - raise ValidationError(self._errors) + obj = self.from_native(value, files) + if not self._errors: + self.object = obj + into[self.source or field_name] = self + else: + # Propagate errors up to our parent + raise ValidationError(self._errors) def get_default_fields(self): """ @@ -575,7 +576,7 @@ class ModelSerializer(Serializer): return instance def _save(self, parent=None, fk_field=None): - if self.delete: + if self._delete: self.object.delete() return |
