Django rest framework 使用django rest框架进行部分更新时出现Keyerror
我正在尝试对端点进行部分更新(补丁),但我发现Django rest framework 使用django rest框架进行部分更新时出现Keyerror,django-rest-framework,Django Rest Framework,我正在尝试对端点进行部分更新(补丁),但我发现keyerror“profile”。创建和更新部分正常。但补丁没有 我的序列化程序: 类UserProfiler序列化程序( serializers.ModelSerializer ): 类元: 模型=外形 排除=(“用户”,) 类用户序列化程序( serializers.ModelSerializer ): profile=UserProfileSerializer(partial=True) def创建(自我验证的_数据): profile=va
keyerror“profile”
。创建和更新部分正常。但补丁没有
我的序列化程序:
类UserProfiler序列化程序(
serializers.ModelSerializer
):
类元:
模型=外形
排除=(“用户”,)
类用户序列化程序(
serializers.ModelSerializer
):
profile=UserProfileSerializer(partial=True)
def创建(自我验证的_数据):
profile=validated_data.pop('profile'))
user=super(UserSerializer,self).create(已验证的\u数据)
user.set_密码(已验证的_数据['password'])
user.save()
user.profile.company=profile[“company”]
user.profile.save()文件
返回用户
def更新(自身、实例、已验证的_数据):
profile=validated_data.pop('profile'))
user=super().update(实例,已验证的\u数据)
user.set_密码(已验证的_数据['password'])
user.save()
user.profile.company=profile[“company”]
user.profile.save()文件
返回用户
类元:
模型=用户
排除=(“组”、“用户权限”,)
我的看法是:
class UserViewSet(ViewSet.ModelViewSet):
queryset=User.objects.all()
serializer\u class=UserSerializer
模型=用户
如上所述,创建和更新部分是可以的
我尝试的一种方法是在视图中创建一个partial_update方法,但没有成功。下面是一个例子:
def部分更新(self、request、*args、**kwargs):
user=user.objects.get(**kwargs)
profile=profile.objects.get(user=user)
serializer=UserSerializer(user.profile,data=request.data,partial=True)
如果序列化程序.u有效():
serializer.save()
返回响应(“OK”)
返回响应(“Nop”)
序列化程序无效
如果不使用此方法,当我使用修补程序(使用postman)时,会出现以下错误:
KeyError at /api/v1/user/79/
'profile'
@ToniSredanović的更多信息
我的修补程序请求:
{
"username": "insomnia77"
}
我的回溯:
Traceback:
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/django/core/handlers/base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/rest_framework/viewsets.py" in view
103. return self.dispatch(request, *args, **kwargs)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/rest_framework/views.py" in dispatch
483. response = self.handle_exception(exc)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/rest_framework/views.py" in handle_exception
443. self.raise_uncaught_exception(exc)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/rest_framework/views.py" in dispatch
480. response = handler(request, *args, **kwargs)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/rest_framework/mixins.py" in partial_update
84. return self.update(request, *args, **kwargs)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/rest_framework/mixins.py" in update
70. self.perform_update(serializer)
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/rest_framework/mixins.py" in perform_update
80. serializer.save()
File "/home/joey/PycharmProjects/backend/.venv/lib64/python3.7/site-packages/rest_framework/serializers.py" in save
209. self.instance = self.update(self.instance, validated_data)
File "/home/joey/PycharmProjects/backend/frontend_api/v1/serializers/core.py" in update
45. profile = validated_data.pop('profile')
Exception Type: KeyError at /interface/v1/user/79/
Exception Value: 'profile'
Request information:
USER: joey
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
你能展示完整的回溯和你发送的补丁请求吗?嘿@ToniSredanović谢谢。我刚刚更新了更多信息。