Python django rest错误:创建对象时缺少必需的位置参数
我有这些序列化程序类,我正在尝试一起创建医生和用户Python django rest错误:创建对象时缺少必需的位置参数,python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我有这些序列化程序类,我正在尝试一起创建医生和用户 class UserSerializer(serializers.ModelSerializer): password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True) class Meta: model = User fields = '__all__' extra_kwar
class UserSerializer(serializers.ModelSerializer):
password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)
class Meta:
model = User
fields = '__all__'
extra_kwargs = {
'password': {'write_only': True}
}
def create(self, validated_data):
print(validated_data)
user = User(
email=self.validated_data['email'],
first_name = self.validated_data['first_name'],
last_name=self.validated_data['last_name'],
phone_number=self.validated_data['phone_number'],
social_id=self.validated_data['social_id'],
gender=self.validated_data['gender']
)
password = self.validated_data['password']
password2 = self.validated_data['password2']
if password != password2:
raise serializers.ValidationError({'password': 'Passwords do not match.'})
user.set_password(password)
user.save()
return user
class DoctorSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = Doctor
fields = '__all__'
def create(self, validated_data):
user_data = validated_data.pop('user')
print(user_data)
user = UserSerializer.create(**user_data)
doctor = Doctor(
user=user,
mc_code=self.validated_data['mc_code']
)
doctor.save()
return doctor
我将这些json数据发送给这些序列化程序
{
"user": {
"email": "test@test.com",
"first_name": "john",
"last_name": "doe",
"phone_number": "12345678901",
"social_id": "1234567890",
"password": "password",
"password2": "password"
},
"mc_code": 123448
}
但它给了我一个错误:
Exception Type: TypeError
Exception Value: create() got an unexpected keyword argument 'password2'
此create()
是UserSerializer
的create
函数
我阅读了文档,但我无法解决问题。我做错了什么
查看
功能以防万一
@api_view(['POST', ])
@permission_classes(())
def doctor_registration_view(request):
if request.method == 'POST':
serializer = DoctorSerializer(data=request.data)
data = {}
if serializer.is_valid():
doctor = serializer.save()
else:
data = serializer.errors
return Response(data)
您需要为序列化程序指定密码和密码2。在代码中,您只指定了密码,但从未指定密码2
password2
在UserSerializer
中,password
在User
模型中。另外,当我单独使用UserSerializer
时,它也可以工作。我的代码在嵌套序列化程序中有问题,我认为它在DoctorSerializer