Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Comment Create Serializer Function Part 3

概要

Django REST Frameworkに再挑戦 その14 Comment Create Serializer Function Part 3

参考サイト

www.django-rest-framework.org

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も、ここはややこしいから、何度もやってくれと言っている。頑張ろう。