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

Keep existing Image in database when API client sends no Image while updating in Django REST

在更新 用户配置文件时, 当 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"
}

此处我现有的图像已替换为 null 当 API 客户端在更新时不发送任何图像。

这是API Client's data

截图

这是我的views.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)

这是我的serializer.py

class UpdateSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = [
            'first_name',
            'last_name',
            'gender',
            'profile_pic',
            'bio',
        ]

如果API客户端没有发送图片,我想保留现有图片怎么办?

因为您是从补丁方法中调用更新而不是 partial_update。在这种情况下确实没有必要重写该方法,因为它完全按照您的要求进行操作,并且您没有向其中添加任何内容。查看它是如何实现的here