Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新方法为';t工作[Djangorest框架]_Django_Api_Django Rest Framework - Fatal编程技术网

更新方法为';t工作[Djangorest框架]

更新方法为';t工作[Djangorest框架],django,api,django-rest-framework,Django,Api,Django Rest Framework,我试图通过使用ViewSet来抽象我的端点,由于某些原因,其中一个端点的update()方法没有保存更新的字段 如何更新字段 注意:我正在使用Postman使用PUT方法进行测试 serializers.py: class UpdateArticleSerializer(serializers.Serializer): title = serializers.CharField(max_length=250, required=True) body = serializers.

我试图通过使用ViewSet来抽象我的端点,由于某些原因,其中一个端点的update()方法没有保存更新的字段

如何更新字段

注意:我正在使用Postman使用PUT方法进行测试

serializers.py:

class UpdateArticleSerializer(serializers.Serializer):

    title = serializers.CharField(max_length=250, required=True)
    body = serializers.CharField()
    image_url = serializers.URLField()
    keypoint = serializers.ListField()
    country = CountrySerializer(read_only=True)
    category = CategorySerializer(read_only=True)

    def create(self, validated_data):
        return Article(**validated_data)

    def update(self, instance, validated_data):
        instance.title = validated_data.get('title', instance.title)
        instance.body = validated_data.get('body', instance.body)
        instance.image_url = validated_data.get('image_url', 
            instance.image_url)
        instance.keypoint = validated_data.get('keypoint', 
            instance.keypoint)
        instance.country = validated_data.get('country', 
            instance.country)
        instance.category = validated_data.get('category', 
            instance.category)
        instance.save()

        return instance
views.py[更新方法]:

    def update(self, request, pk=None):
        article = Article.objects.get(id=pk)
        serializer = UpdateArticleSerializer(data=request.data)

        if article.author == request.user:
            if article.is_published != True:

                if serializer.is_valid():
                    serializer.save(author=request.user)
               queryset = article
               serializer = ArticleSerializer(queryset)   
                return 
                     Response(jsend.success({'post':serializer.data}), 
                     status=status.HTTP_200_OK)
            else: 
                return Response((jsend.error('Published post cannot be 
                  edited')), status=status.HTTP_409_CONFLICT)
        else:
            return Response((jsend.error("You are not authorized to 
            perform this action")), status=status.HTTP_403_FORBIDDEN)
您不提供现有实例,因此
serializer.save()
将路由到
serializer.create()

它应该是这样的:

serializer = UpdateArticleSerializer(instance=self.get_object(), data=request.data)
您不提供现有实例,因此
serializer.save()
将路由到
serializer.create()

它应该是这样的:

serializer = UpdateArticleSerializer(instance=self.get_object(), data=request.data)

谢谢@Linovia,问题解决了。检查这里:谢谢,你的评论帮助解决了我的问题,尽管我不得不将“请求”作为上下文传递:UpdateSerializer(..上下文={'request':request})谢谢@Linovia,问题解决了。检查此处:谢谢,您的评论帮助解决了我的问题,尽管我必须将“请求”作为上下文传递:UpdateSerializer(..上下文={'request':request})