django - 在 django rest 框架中使用嵌套用户更新配置文件
问题描述
我需要使用嵌套序列化程序在一个请求中使用用户更新 Administrator 对象。
我的意见.py:
class AdministratorDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Administrator.objects.all()
serializer_class = AdministratorSerializer
permission_classes = (
permissions.IsAuthenticated,
custom_permissions.IsAdministrator |
custom_permissions.IsHR |
permissions.IsAdminUser,
)
def put(self, request, *args, **kwargs):
serializer = AdministratorSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)
和serializers.py:
class AdministratorSerializer(serializers.ModelSerializer):
user = UserSerializer(required=True)
class Meta:
model = Administrator
fields = '__all__'
def create(self, validated_data):
user_data = validated_data.pop('user')
password = User.objects.make_random_password()
user = User.objects.create_user(
password=password,
is_administrator=True,
**user_data
)
admin_obj = Administrator.objects.create(user=user, **validated_data)
send_password.delay(user.email, password)
return admin_obj
def update(self, instance, validated_data):
user_data = validated_data.pop('user')
print(user_data)
user = instance.user
for k, v in user_data.items():
setattr(user, k, v)
user.save()
for k, v in validated_data.items():
setattr(instance, k, v)
instance.save()
return instance
但我得到了400 Bad Request
:
{
"user": {
"email": [
"user with this email address already exists."
]
}
}
我哪里做错了?为什么要根据put请求创建一个新用户?
解决方案
推荐阅读
- android - 将事件添加到 Outlook 日历
- python-3.x - 为什么 I/O 与多线程 Python 应用程序中的计算不重叠?
- html - 使用 office url referrer 直接从浏览器打开 word 文件
- mysql - 我如何从数据库中获取图像以在 laravel 中查看文件
- c# - 如何获取弹出窗口或对话框的窗口标题、进程 ID?
- c# - 随机选择文档
- java - Android - 在 JUnit/Espresso 测试中更改语言环境以使用规则生成应用屏幕截图
- javascript - Javascript 问题:当鼠标悬停在 div 上时,如何从颜色数组中更改标题的随机颜色?
- python - Django中的嵌套关系
- javascript - 解析嵌套 JSON 并以特定格式显示