mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-03 20:10:10 +03:00
fixes fields behaviour when null value is assigned
This commit is contained in:
parent
8eadac39ad
commit
d413ce5d1a
|
@ -429,6 +429,11 @@ class ModelField(WritableField):
|
|||
"type": self.model_field.get_internal_type()
|
||||
}
|
||||
|
||||
def validate(self, value):
|
||||
super(ModelField, self).validate(value)
|
||||
if value is None and not self.model_field.null:
|
||||
raise ValidationError(self.error_messages['invalid'])
|
||||
|
||||
|
||||
##### Typed Fields #####
|
||||
|
||||
|
@ -474,10 +479,7 @@ class CharField(WritableField):
|
|||
self.validators.append(validators.MaxLengthValidator(max_length))
|
||||
|
||||
def from_native(self, value):
|
||||
if isinstance(value, six.string_types):
|
||||
return value
|
||||
|
||||
if value is None:
|
||||
if value in validators.EMPTY_VALUES:
|
||||
return ''
|
||||
|
||||
return smart_text(value)
|
||||
|
|
|
@ -33,7 +33,7 @@ class RelatedField(WritableField):
|
|||
many_widget = widgets.SelectMultiple
|
||||
form_field_class = forms.ChoiceField
|
||||
many_form_field_class = forms.MultipleChoiceField
|
||||
null_values = (None, '', 'None')
|
||||
null_values = (None, '', 'None', [], (), {})
|
||||
|
||||
cache_choices = False
|
||||
empty_label = None
|
||||
|
@ -182,7 +182,7 @@ class RelatedField(WritableField):
|
|||
if value in self.null_values:
|
||||
if self.required:
|
||||
raise ValidationError(self.error_messages['required'])
|
||||
into[(self.source or field_name)] = None
|
||||
into[(self.source or field_name)] = [] if self.many else None
|
||||
elif self.many:
|
||||
into[(self.source or field_name)] = [self.from_native(item) for item in value]
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue
Block a user