Django rest - сделать сериализатор для создания объекта по полям данных как дочернего, так и родительского класса
Объект пользователя и объект учителя создаются, но поле "имя" объекта учителя не получает данных.
postman POST:
{ "email": "b@gmail.com", "пароль": "b1234", "password2": "b1234", "Teacher":{"name":"b"} }
serializers- view.py
class TeacherSignupView(generics.GenericAPIView):
serializer_class=UserSerializer
def post(self, request, *args, **kwargs):
serializer=self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user=serializer.save()
return Response({
"user":UserSerializer(user, context=self.get_serializer_context()).data,
"token": Token.objects.get(user=user).key,
"message":"account created successfully"
})
serializers- serializers.py
class TeacherSignupSerializer(serializers.ModelSerializer):
class Meta:
model=Teacher
fields=['name']
user=Teacher
class UserSerializer(serializers.ModelSerializer):
Teacher=TeacherSignupSerializer()
password2=serializers.CharField(style={"input_type":"password"}, write_only=True)
class Meta:
model=User
fields=['email','password', 'password2', 'Teacher']
extra_kwargs={
'password':{'write_only':True}
}
def create(self, validated_data):
t_data=validated_data.pop('Teacher')
user=User(
email=self.validated_data['email']
)
password=self.validated_data['password']
password2=self.validated_data['password2']
if password != password2:
raise serializers.ValidationError({"error":"Password did not match"})
user.set_password(password)
user.is_teacher=True
user.save()
for name in t_data:
Teacher.objects.create(user=user, name=name)
return user
в почтальоне используется следующим образом.
{"email": "b@gmail.com", "password": "b1234", "password2": "b1234", "Teacher":[{"name":"b"}]}