Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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
Python 当API客户端在Django REST中更新时不发送图像时,将现有图像保留在数据库中_Python_Django_Django Rest Framework_Django Views_Django Generic Views - Fatal编程技术网

Python 当API客户端在Django REST中更新时不发送图像时,将现有图像保留在数据库中

Python 当API客户端在Django REST中更新时不发送图像时,将现有图像保留在数据库中,python,django,django-rest-framework,django-views,django-generic-views,Python,Django,Django Rest Framework,Django Views,Django Generic Views,更新用户配置文件时,当API客户端不发送任何图像时,我希望在数据库中保留上一个图像 更新前的配置文件数据… { "first_name": "Minhajul", "last_name": "Islam", "gender": "Male", "profile_pic": "/media/ProfilePic/minhaj/IMG_5441_zjuUKoe.JPG", "bio": "bio" } { "first_name": "Minhaju

更新用户配置文件时,当API客户端不发送任何图像时,我希望在数据库中保留上一个图像

更新前的配置文件数据…

{
    "first_name": "Minhajul",
    "last_name": "Islam",
    "gender": "Male",
    "profile_pic": "/media/ProfilePic/minhaj/IMG_5441_zjuUKoe.JPG",
    "bio": "bio"
}
{
    "first_name": "Minhajul Islam",
    "last_name": "Sifat",
    "gender": "Male",
    "profile_pic": null,
    "bio": "new bio"
}
更新后的配置文件数据…

{
    "first_name": "Minhajul",
    "last_name": "Islam",
    "gender": "Male",
    "profile_pic": "/media/ProfilePic/minhaj/IMG_5441_zjuUKoe.JPG",
    "bio": "bio"
}
{
    "first_name": "Minhajul Islam",
    "last_name": "Sifat",
    "gender": "Male",
    "profile_pic": null,
    "bio": "new bio"
}
这里,当API客户端在更新时不发送任何图像时,我的现有图像已替换为null

这是的屏幕截图

这是我的观点。py

from.serializers import UpdateSerializer
class Test(generics.UpdateAPIView, generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UpdateSerializer
    lookup_field = 'username'

    def list(self, request, *args, **kwargs):
        username = self.kwargs.get('username')
        if username != str(self.request.user):
            return Response({"Invalid Request"}, status=status.HTTP_401_UNAUTHORIZED)
        queryset = self.get_queryset().filter(username=self.request.user)
        serializer = UpdateSerializer(queryset, many=True)
        return Response(serializer.data[0], status=200)

    def patch(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)
class UpdateSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = [
            'first_name',
            'last_name',
            'gender',
            'profile_pic',
            'bio',
        ]
这是我的序列化程序.py

from.serializers import UpdateSerializer
class Test(generics.UpdateAPIView, generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UpdateSerializer
    lookup_field = 'username'

    def list(self, request, *args, **kwargs):
        username = self.kwargs.get('username')
        if username != str(self.request.user):
            return Response({"Invalid Request"}, status=status.HTTP_401_UNAUTHORIZED)
        queryset = self.get_queryset().filter(username=self.request.user)
        serializer = UpdateSerializer(queryset, many=True)
        return Response(serializer.data[0], status=200)

    def patch(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)
class UpdateSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = [
            'first_name',
            'last_name',
            'gender',
            'profile_pic',
            'bio',
        ]

如果要在API客户端不发送图像时保留现有图片,我必须做什么?

因为您正在从修补程序方法调用更新而不是部分更新。在这种情况下,确实不需要重写该方法,因为它完全执行您想要的操作,并且您没有向其添加任何内容。检查它是如何实现的

,因为您正在从patch方法调用update而不是partial_update。在这种情况下,确实不需要重写该方法,因为它完全执行您想要的操作,并且您没有向其添加任何内容。检查它是如何实现的是,当我实现部分更新()时它会工作。这样,当用户没有选择任何图片时,我就不会发送profile_pic字段&以前的图片仍保留在数据库中。谢谢你@Ken4Scholars不客气。我将重写评论作为答案,这样它可以帮助其他人。如果答案对你有帮助,请接受