目的
- 前に書いたやつ でserializerの中身は読んだ
- でもこのserializerってどこでどう呼ばれてるんだろう
環境
- 前のと同じ
- Serializerの使い方とかは参考記事を参照
結論
-
mixins.py
で呼ばれてた-
create
とupdate
のそれぞれで
-
class CreateModelMixin(object):
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
class UpdateModelMixin(object):
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
-
get_serializer
してis_valid
してperform_hogehoge
するっていう流れらしい-
perform_hogehoge
ではserializer.save()
してる
-
応用
- POSTとかPUTでAPIを呼ばれた時の挙動を帰るときはviewの
create
メソッドとかupdate
メソッドを上書きしてやればよさげ - DBにデータ書き込みはしないけどPOSTでAPIを提供したいときは↓みたいな感じ?
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
# ここでserializer.validated_dataを使って何らかの処理をする
return Response({'result': 'data'}, status=status.HTTP_200_OK)