JSON Serialize
2018, Sep 22
JSON Serialization through ModelSerializer
In django-rest-framework(DRF), first transform original data to convertible data in JSONRender through ModelSerializer
.
Serializer
is similar with Django’s Form
, ModelSerializer
is Django’s ModelForm
.
In the role of those, Serializer
is just Form which only proceeds POST
.
Django Form/ModelForm | Django Serializer/ModelSerializer |
---|---|
Specify form field / read from model | ← |
Create Form HTML | Create JSON serialization |
Check validation about input data and acquisition | ← |
Define ModelSerializer
. It’s really similar to ModelForm
.
from rest_framework.serializers import ModelSerializer
# Define ModelSerializer about Post Model
class PostModelSerializer(ModelSerializer):
class Meta:
model = Post
fields = '__all__'
PostModelSerializer
supports transformation to dict
type for Post model instance.
Feed Post instance to PostModelSerializer
.
post = Post.objects.first() # Post type
serializer = PostModelSerializer(post)
serializer.data
serializer.data type is ReturnDict
, which inherited from OrderDict
and get the serializer field additionally through generator.
class ReturnDict(OrderedDict):
def __init__(self, *args, **kwargs):
self.serializer = kwargs.pop('serializer')
super().__init__(*args, **kwargs)
# ...
QuerySet transformation
ModelSerializer
supports transformation about QuerySet.
“many” parameter of ModelSerializer
is False, so we need to set many=True in order to proceed QuerySet.
# QuerySet
serializer = PostModelSerializer(Post.objects.all(), many=True)
# 지정된 Model Instance 필드를 통해 list/OrderedDict 획득
serializer.data