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