Python Django rest框架AttributeError:can';在序列化程序上找不到字段
背景语境Python Django rest框架AttributeError:can';在序列化程序上找不到字段,python,django,django-rest-framework,django-rest-auth,Python,Django,Django Rest Framework,Django Rest Auth,背景语境 我正在使用django rest框架和django rest auth构建一个API。我的身份验证方案不仅使用电子邮件/用户名和密码的默认身份验证,还需要配置文件模型上提供的其他数据 因此,我使用一个自定义注册序列化程序,并覆盖设置中的REGISTER\u serializer类 这是序列化程序,如下所示: class UserProfileSerializer(serializers.ModelSerializer): phone_number = PhoneNumberF
我正在使用django rest框架和django rest auth构建一个API。我的身份验证方案不仅使用电子邮件/用户名和密码的默认身份验证,还需要
配置文件
模型上提供的其他数据
因此,我使用一个自定义注册序列化程序,并覆盖设置中的REGISTER\u serializer
类
这是序列化程序,如下所示:
class UserProfileSerializer(serializers.ModelSerializer):
phone_number = PhoneNumberField()
class Meta(object):
model = Profile
fields = ('phone_number', 'birth_date', 'anniversary', 'user_type',)
class UserRegisterSerializer(serializers.Serializer):
username = serializers.CharField(
max_length=get_username_max_length(),
min_length=allauth_settings.USERNAME_MIN_LENGTH,
required=allauth_settings.USERNAME_REQUIRED
)
email = serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED)
serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED)
password1 = serializers.CharField(write_only=True)
password2 = serializers.CharField(write_only=True)
profile = UserProfileSerializer()
..............
Validation methods
..............
def custom_signup(self, request, user):
pass
def get_cleaned_data(self):
return {
'username': self.validated_data.get('username', ''),
'password1': self.validated_data.get('password1', ''),
'email': self.validated_data.get('email', '')
}
def save(self, request):
adapter = get_adapter()
user = adapter.new_user(request)
self.cleaned_data = self.get_cleaned_data()
adapter.save_user(request, user, self)
self.custom_signup(request, user)
setup_user_email(request, user, [])
profile_data = self.validated_data.pop('profile', {})
user_repo.create_object(user=user, **profile_data)
return user
问题 序列化程序和对应的端点的工作原理是,它正在创建用户和关联的概要文件,但是在序列化步骤中,当返回响应时,我得到以下错误:
KeyError: "Got KeyError when attempting to get a value for field `profile` on serializer `UserRegisterSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `OrderedDict` instance.
Original exception text was: 'profile'."
如您所见,该字段存在于序列化程序上。我尝试将该字段添加到Meta
classe的字段属性中,但没有成功
我已经把它缩小到rest\u framework/serializers.py中的函数to\u representation
,行号488
。当序列化程序尝试调用嵌套序列化程序上的get\u属性
时,会发生此错误
谢谢
编辑:
Edit-1:您能显示该视图吗?该视图是django rest framework
使用的默认视图。我可以链接到它。你可以发布完整的堆栈跟踪吗?@FazilZaid确实,当你使用自定义设置文件时,你在设置文件中添加了“REGISTER\u SERIALIZER”字段了吗?你能显示视图吗?该视图是django rest framework
使用的默认视图。我可以链接到它。你也可以发布完整的堆栈跟踪吗?@FazilZaid确定你在设置文件中添加了“REGISTER\u SERIALIZER”字段,因为你正在使用自定义字段?