在 Django 应用程序(使用 DRF)中,我有一个用户配置文件模型。要更新个人资料信息,我想使用 PUT。但是,我有一个名为“元”的字段,它本身就是一个对象/字典。如果我遗漏了它的任何属性(性别、手机、生日),我将丢失这些数据,因为整个“元”都被新的替换了。任何字段都不会发生这种情况(例如,如果我不指定名字,该字段将保持不变)。以下是 PUT 请求正文的示例:
{
"id": 1,
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"meta": {
"gender": "female",
"mobile": 123456789,
"birthday":"01-01-1970"
}
}
我能做些什么来确保丢失的属性不会丢失?有没有办法实现或强制将先前的数据与请求中的数据合并/更新?
这是方法:
def put(self, request, pk):
user = User.objects.get(id=pk)
serializer = UserSerializer(user, data=request.data, context={'request': request})
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这是序列化程序:
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = [
'id',
'url',
'first_name',
'last_name',
'email',
'meta'
]