fixes fields behaviour when null value is assigned

This commit is contained in:
Anton Martyniuk 2014-06-29 15:51:12 +02:00
parent 8eadac39ad
commit d413ce5d1a
2 changed files with 8 additions and 6 deletions

View File

@ -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)

View File

@ -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: