Comment Create Serializer Function Part 3
概要
Django REST Frameworkに再挑戦 その14 Comment Create Serializer Function Part 3
参考サイト
www.codingforentrepreneurs.com
Comment Create Serializer Function Part 3
- comments/api/views.pyにCommentCreateAPIViewを定義していく。
... from .serializers import ( CommentSerializer, CommentDetailSerializer, create_comment_serializer, ) ... class CommentCreateAPIView(CreateAPIView): queryset = Comment.objects.all() # serializer_class = PostCreateUpdateSerializer permission_classes = [IsAuthenticated] def get_serializer_class(self): model_type = self.request.GET.get("type") slug = self.request.GET.get("slug") parent_id = self.request.GET.get("parent_id", None) return create_comment_serializer( model_type=model_type, slug=slug, parent_id=parent_id, user=self.request.user )
- urls.pyを設定する。
url(r'^create/$', CommentCreateAPIView.as_view(), name='create'),
- これで
/api/comments/create/
を開いてみる。。。。Error!'CommentCreateSerializer' object has no attribute 'parent_id' という表示が出てしまった。。。parent_id確かに設定されてない気がする。
def create_comment_serializer(model_type='post', slug=None, parent_id=None, user=None): # slugの箇所は、object_idでも可。 class CommentCreateSerializer(ModelSerializer): ... if parent_id: # self.parent_idだとセットされていないためerrorがでる。
- あと、justinの動画では、以下の箇所を修正する必要があるらしい。user登録されている場合は、userをそのまま指定して、ない場合は、userリストからゲットする。
def create(self, validated_data): content = validated_data.get("content") if user: main_user = user else: main_user = User.objects.all().first() model_type = self.model_type slug = self.slug parent_obj = self.parent_obj comment = Comment.objects.create_by_model_type( mmodel_type,slug,main_user,content, parent_obj=parent_obj) return comment
これで再度、
/api/comments/create/
を開いてみる。。。できた!Postしてみる。
"This is not a valid content_type"
というvalidate errorが発生。なんやかやでクリア〜!ちょっとややこしかったな〜。justinも、ここはややこしいから、何度もやってくれと言っている。頑張ろう。