diff options
| author | Tom Christie | 2014-12-01 11:59:04 +0000 |
|---|---|---|
| committer | Tom Christie | 2014-12-01 11:59:04 +0000 |
| commit | 270c7acdd75e9dd0b7a600e5648b0ec364c9a510 (patch) | |
| tree | caa8742f7c45a3a4b2ef0f0c2a6a98a6208d9869 /rest_framework | |
| parent | 22c5b863bc395a6df84ec2536849540d3e92da7a (diff) | |
| download | django-rest-framework-270c7acdd75e9dd0b7a600e5648b0ec364c9a510.tar.bz2 | |
Minor validtors tweak3.0.0
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/serializers.py | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 3783b285..0d0a4d9a 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -601,6 +601,26 @@ class ModelSerializer(Serializer): _related_class = PrimaryKeyRelatedField def create(self, validated_attrs): + """ + We have a bit of extra checking around this in order to provide + descriptive messages when something goes wrong, but this method is + essentially just: + + return ExampleModel.objects.create(**validated_attrs) + + If there are many to many fields present on the instance then they + cannot be set until the model is instantiated, in which case the + implementation is like so: + + example_relationship = validated_attrs.pop('example_relationship') + instance = ExampleModel.objects.create(**validated_attrs) + instance.example_relationship = example_relationship + return instance + + The default implementation also does not handle nested relationships. + If you want to support writable nested relationships you'll need + to write an explicit `.create()` method. + """ # Check that the user isn't trying to handle a writable nested field. # If we don't do this explicitly they'd likely get a confusing # error at the point of calling `Model.objects.create()`. @@ -651,14 +671,19 @@ class ModelSerializer(Serializer): return instance def get_validators(self): + # If the validators have been declared explicitly then use that. + validators = getattr(getattr(self, 'Meta', None), 'validators', None) + if validators is not None: + return validators + + # Determine the default set of validators. + validators = [] + model_class = self.Meta.model field_names = set([ field.source for field in self.fields.values() if (field.source != '*') and ('.' not in field.source) ]) - validators = getattr(getattr(self, 'Meta', None), 'validators', []) - model_class = self.Meta.model - # Note that we make sure to check `unique_together` both on the # base model class, but also on any parent classes. for parent_class in [model_class] + list(model_class._meta.parents.keys()): |
