mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-30 13:34:00 +03:00
Merge branch 'master' into basic-nested-serialization
This commit is contained in:
commit
ad3ffe20f0
|
@ -25,6 +25,7 @@ Let's start by creating a simple object we can use for example purposes:
|
||||||
comment = Comment(email='leila@example.com', content='foo bar')
|
comment = Comment(email='leila@example.com', content='foo bar')
|
||||||
|
|
||||||
We'll declare a serializer that we can use to serialize and deserialize `Comment` objects.
|
We'll declare a serializer that we can use to serialize and deserialize `Comment` objects.
|
||||||
|
|
||||||
Declaring a serializer looks very similar to declaring a form:
|
Declaring a serializer looks very similar to declaring a form:
|
||||||
|
|
||||||
class CommentSerializer(serializers.Serializer):
|
class CommentSerializer(serializers.Serializer):
|
||||||
|
@ -33,10 +34,17 @@ Declaring a serializer looks very similar to declaring a form:
|
||||||
created = serializers.DateTimeField()
|
created = serializers.DateTimeField()
|
||||||
|
|
||||||
def restore_object(self, attrs, instance=None):
|
def restore_object(self, attrs, instance=None):
|
||||||
|
"""
|
||||||
|
Given a dictionary of deserialized field values, either update
|
||||||
|
an existing model instance, or create a new model instance.
|
||||||
|
|
||||||
|
Note that if we don't define this method, then deserializing
|
||||||
|
data will simply return a dictionary of items.
|
||||||
|
"""
|
||||||
if instance is not None:
|
if instance is not None:
|
||||||
instance.title = attrs['title']
|
instance.title = attrs.get('title', instance.title)
|
||||||
instance.content = attrs['content']
|
instance.content = attrs.get('content', instance.content)
|
||||||
instance.created = attrs['created']
|
instance.created = attrs.get('created', instance.created)
|
||||||
return instance
|
return instance
|
||||||
return Comment(**attrs)
|
return Comment(**attrs)
|
||||||
|
|
||||||
|
@ -91,9 +99,10 @@ To serialize a queryset instead of an object instance, you should pass the `many
|
||||||
|
|
||||||
## Validation
|
## Validation
|
||||||
|
|
||||||
When deserializing data, you always need to call `is_valid()` before attempting to access the deserialized object. If any validation errors occur, the `.errors` and `.non_field_errors` properties will contain the resulting error messages.
|
When deserializing data, you always need to call `is_valid()` before attempting to access the deserialized object. If any validation errors occur, the `.errors` property will contain a dictionary representing the resulting error messages.
|
||||||
|
Each key in the dictionary will be the field name, and the values will be lists of strings of any error messages corresponding to that field. The `non_field_errors` key may also be present, and will list any general validation errors.
|
||||||
|
|
||||||
When deserialising a list of items, errors will be returned as a list of tuples. The first item in an error tuple will be the index of the item with the error in the original data; The second item in the tuple will be a dict with the individual errors for that item.
|
When deserializing a list of items, errors will be returned as a list of dictionaries representing each of the deserialized items.
|
||||||
|
|
||||||
### Field-level validation
|
### Field-level validation
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,11 @@ The first thing we need to get started on our Web API is provide a way of serial
|
||||||
|
|
||||||
def restore_object(self, attrs, instance=None):
|
def restore_object(self, attrs, instance=None):
|
||||||
"""
|
"""
|
||||||
Create or update a new snippet instance.
|
Create or update a new snippet instance, given a dictionary
|
||||||
|
of deserialized field values.
|
||||||
|
|
||||||
|
Note that if we don't define this method, then deserializing
|
||||||
|
data will simply return a dictionary of items.
|
||||||
"""
|
"""
|
||||||
if instance:
|
if instance:
|
||||||
# Update existing instance
|
# Update existing instance
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
"""Tests for the status module"""
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
from django.test import TestCase
|
|
||||||
from rest_framework import status
|
|
||||||
|
|
||||||
|
|
||||||
class TestStatus(TestCase):
|
|
||||||
"""Simple sanity test to check the status module"""
|
|
||||||
|
|
||||||
def test_status(self):
|
|
||||||
"""Ensure the status module is present and correct."""
|
|
||||||
self.assertEqual(200, status.HTTP_200_OK)
|
|
||||||
self.assertEqual(404, status.HTTP_404_NOT_FOUND)
|
|
Loading…
Reference in New Issue
Block a user