Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django rest framework 使用django rest框架进行部分更新时出现Keyerror_Django Rest Framework - Fatal编程技术网

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ć谢谢。我刚刚更新了更多信息。