Python 当API客户端在Django REST中更新时不发送图像时,将现有图像保留在数据库中
更新用户配置文件时,当API客户端不发送任何图像时,我希望在数据库中保留上一个图像 更新前的配置文件数据…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
{
"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不客气。我将重写评论作为答案,这样它可以帮助其他人。如果答案对你有帮助,请接受