我有一个用户注册APIView。
查看:
class UserCreateAPIView(CreateAPIView):
serializer_class = UserCreateSerializer
permission_classes = [AllowAny]
queryset = User.objects.all()
串行化器:
class UserCreateSerializer(ModelSerializer):
"""
User register
"""
class Meta:
model = User
fields = [
'username',
'wechat_num',
'password',
]
extra_kwargs = {
"password":{"write_only":True}
}
def create(self, validated_data):
username=validated_data.pop('username')
wechat_num = validated_data.pop('wechat_num')
password=validated_data.pop('password')
user_obj = User(
username=username,
wechat_num=wechat_num,
)
user_obj.set_password(password)
user_obj.save()
group=getOrCreateGroupByName(USER_GROUP_CHOICES.User)
user_obj.groups.add(group)
return validated_data
当我访问这个APIView时,我会得到错误:
KeyError at /API/users/register/“尝试获取序列化程序UserCreateSerializer
上的字段username
的值时出现KeyError。\n此序列化程序字段可能命名不正确,并且与dict
示例上的任何属性或键都不匹配。\n原始异常文本为:'用户名'。”
但数据库它会创建用户成功.
所有测试成功:
3条答案
按热度按时间ubby3x7f1#
您将弹出
validated_data
中的所有字段,因此当您最终返回时,它们将不在字典中。您可能希望将其更改为:
v2g6jxz62#
从方法
返回创建的示例。对你来说,
icomxhvb3#
在定义了你的类之后,你必须定义那些字段,这就是我所做的,它工作得很好。
就像这样我也犯了同样的错误。我忘记设置密码了。