mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-03 05:04:31 +03:00
Tweaks
This commit is contained in:
parent
14ae52a24e
commit
4c015df28c
|
@ -144,6 +144,24 @@ The corresponding code would now look like this:
|
||||||
logging.info('Creating ticket "%s"' % name)
|
logging.info('Creating ticket "%s"' % name)
|
||||||
serializer.save(user=request.user) # Include the user when saving.
|
serializer.save(user=request.user) # Include the user when saving.
|
||||||
|
|
||||||
|
#### Change to `validate_<field_name>`.
|
||||||
|
|
||||||
|
The `validate_<field_name>` method hooks that can be attached to serializer classes change their signature slightly and return type. Previously these would take a dictionary of all incoming data, and a key representing the field name, and would return a dictionary including the validated data for that field:
|
||||||
|
|
||||||
|
def validate_score(self, attrs, source):
|
||||||
|
if attrs[score] % 10 != 0:
|
||||||
|
raise ValidationError('This field should be a multiple of ten.')
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
This is now simplified slightly, and the method hooks simply take the value to be validated, and return it's validated value.
|
||||||
|
|
||||||
|
def validate_score(self, value):
|
||||||
|
if value % 10 != 0:
|
||||||
|
raise ValidationError('This field should be a multiple of ten.')
|
||||||
|
return value
|
||||||
|
|
||||||
|
Any ad-hoc validation that applies to more than one field should go in the `.validate(self, attrs)` method as usual.
|
||||||
|
|
||||||
#### Limitations of ModelSerializer validation.
|
#### Limitations of ModelSerializer validation.
|
||||||
|
|
||||||
This change also means that we no longer use the `.full_clean()` method on model instances, but instead perform all validation explicitly on the serializer. This gives a cleaner separation, and ensures that there's no automatic validation behavior on `ModelSerializer` classes that can't also be easily replicated on regular `Serializer` classes.
|
This change also means that we no longer use the `.full_clean()` method on model instances, but instead perform all validation explicitly on the serializer. This gives a cleaner separation, and ensures that there's no automatic validation behavior on `ModelSerializer` classes that can't also be easily replicated on regular `Serializer` classes.
|
||||||
|
|
|
@ -264,9 +264,10 @@ class ManyRelation(Field):
|
||||||
]
|
]
|
||||||
|
|
||||||
def to_representation(self, obj):
|
def to_representation(self, obj):
|
||||||
|
iterable = obj.all() if (hasattr(obj, 'all')) else obj
|
||||||
return [
|
return [
|
||||||
self.child_relation.to_representation(value)
|
self.child_relation.to_representation(value)
|
||||||
for value in obj.all()
|
for value in iterable
|
||||||
]
|
]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
Loading…
Reference in New Issue
Block a user