如何使用DRF的ModelSerializer创建django用户

yda*_*niv 7 python django django-rest-framework

在django中,创建用户具有与通常的模型实例创建不同且独特的流程.你需要调用create_user()哪种方法BaseUserManager.

既然django REST框架的流程要做restore_object(),那么save_object()就不可能简单地ModelSerializer在通用的创建API端点中使用a来创建用户,而不会破解你.

什么是解决这个问题的干净方法?或者至少使用django的内置滚边让它工作?

编辑:

重要的是要注意,特别是不起作用的是,一旦您尝试使用django.contrib.auth.authenticate它来验证创建的用户实例,如果仅使用User.objects.create()和不创建实例,则失败.create_user().

yda*_*niv 2

最终,我重写了序列化器的restore_object方法,并确保使用 来处理发送的密码instance.set_password(password),如下所示:

def restore_object(self, attrs, instance=None):
    if not instance:
        instance = super(RegisterationSerializer, self).restore_object(attrs, instance)
    instance.set_password(attrs.get('password'))
    return instance
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助!