猿问

Django 1.11 get() 缺少 1 个必需的位置参数:'pk'

我正在使用 Django 1.11,但路径参数有问题。对于涉及路径参数的所有请求,我都收到了这样的错误。


Error:

TypeError at /posts/2

get() missing 1 required positional argument: 'pk'


urls.py

...

url(r'^posts',PostView.as_view()),

url(r'^posts/<int:pk>/',PostView.as_view()),

...


views.py

..

#-------- API for CRUD -----------------#

class PostView(APIView):

    permission_classes = (IsAuthenticated,)


    def get_object(self,pk,user_id):

        try:

            return Post.objects.get(pk=pk,user_id=user_id)

        except Post.DoesNotExist:

            raise Http404


    def get(self,request,pk):

        post = Post.objects.get(user=request.user.id)

        serializer = PostSerializer(post)

        return Response({"success":True,"data":serializer.data},status=status.HTTP_200_OK)


    def put(self, request, pk):

        post = self.get_object(pk,request.user.id)

        serializer = PostSerializer(post, data=request.data)

        if serializer.is_valid():

            serializer.save(user=request.user.id)

            return Response(serializer.data)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


    def post(self,request):

        params = request.data

        params['user'] = request.user.id

        serializer = PostSerializer(data=request.data)

        serializer.is_valid(raise_exception=True)

        saved_data = self.perform_create(serializer)

        post = PostSerializer(saved_data)

        return Response({"success":True, "message":"Post  Added Successfully","data":post.data}, status=status.HTTP_201_CREATED)


    def perform_create(self, serializer):

        return serializer.save()

...

网址示例:


GET : localhost:8000/posts/2

有人可以告诉我如何传递位置参数。


潇湘沐
浏览 373回答 2
2回答
随时随地看视频慕课网APP

相关分类

Python
我要回答