ユーザーの登録時に、1つのAPI呼び出しでUserオブジェクトとEmailContactオブジェクトの両方を作成したいと考えています。 2つのオブジェクトはリンクしないでください。 私は、次のシリアライザを持っている:django rest frameworkのシリアライザで2つのモデルを作成する
class RegistrationSerializer(serializers.Serializer):
userserializer=UserAccountSerializer() #reuse existing modelserializer
emailcontactserializer=EmailContactSerializer() #reuse existing modelserializer
def create(self, validated_data):
emailcontact_data = validated_data.pop('emailcontactserializer')
user_data = validated_data.pop('userserializer')
emailcontact= EmailContact.objects.create(**emailcontact_data)
user= User.objects.create(**user_data)
return user
と、次のApiview:
class RegistrationAPIView(APIView):
permission_classes = (AllowAny,)
serializer_class = RegistrationSerializer
def post(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
私が得るエラーは以下の通りです((serializer.saveした後に発生)):
はAttributeError at/api/register シリアライザRegistrationSerializer
のフィールドuserserializer
の値を取得しようとしたときにAttributeErrorが発生しました。 シリアライザフィールドの名前が正しくない可能性があり、User
インスタンスの属性またはキーと一致しない可能性があります。 元の例外テキストは 'User'オブジェクトには 'usererializer'属性がありませんでした。