【发布时间】:2017-11-06 02:04:34
【问题描述】:
在用户注册期间,我希望在一次 api 调用中同时创建一个 User 对象和一个 EmailContact 对象。这两个对象不应链接。 我有以下序列化程序:
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() 之后):
/api/register 处的 AttributeError
尝试在序列化程序 RegistrationSerializer 上获取字段 userserializer 的值时出现 AttributeError。
序列化程序字段可能命名不正确,并且与 User 实例上的任何属性或键都不匹配。
原始异常文本是:“用户”对象没有属性“用户序列化器”。
【问题讨论】: