如何解决通过 dj_rest_auth 在用户注册中保存额外的字段
我一直在参与这个项目的 dj_rest_auth。尝试向自定义用户模型添加额外的字段,但它只保存电子邮件和密码。我想我一切都很好,但没有任何效果。
这是我的用户模型
class CustomUserManager(BaseUserManager):
"""
Custom user model manager where email is the unique identifiers
for authentication instead of usernames.
"""
def create_user(self,email,password,**extra_fields):
"""
Create and save a User with the given email and password.
"""
if not email:
raise ValueError('The Email must be set')
email = self.normalize_email(email)
user = self.model(email=email,**extra_fields)
user.set_password(password)
user.save()
return user
def create_superuser(self,**extra_fields):
"""
Create and save a SuperUser with the given email and password.
"""
extra_fields.setdefault('is_staff',True)
extra_fields.setdefault('is_superuser',True)
extra_fields.setdefault('is_active',True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self.create_user(email,**extra_fields)
class CustomUser(AbstractUser):
username = None
email = models.EmailField('email address',unique=True)
USERNAME_FIELD = 'email'
first_name = models.CharField(max_length=30,blank=True)
last_name = models.CharField(max_length=30,blank=True)
phone = models.CharField(max_length=30,blank=True)
required_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
serializers.py
class UserSerializer(serializers.ModelSerializer):
phone = serializers.CharField(max_length=30,allow_blank=True)
first_name = serializers.CharField(max_length=30,allow_blank=True)
last_name = serializers.CharField(max_length=30,allow_blank=True)
class Meta:
model = CustomUser
fields = ('id','email','first_name','last_name','phone')
def save(self,request):
user = super().save(request)
user.phone = self.data.get('phone')
user.first_name = self.data.get('first_name')
user.last_name = self.data.get('last_name')
user.save()
return user
settings.py
AUTH_USER_MODEL = 'users.CustomUser'
REST_AUTH_REGISTER_SERIALIZERS = {
'REGISTER_SERIALIZER': 'users.serializers.UserSerializer',}
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_USERNAME_required = False
ACCOUNT_EMAIL_required = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
最后在我的 urls.py
path('register/',RegisterView.as_view()),
从邮递员那里我发送了这个帖子请求
{
"email": "ahsan44411@gmail.com","password": "ahsan44411","password2": "ahsan44411","first_name": "ahsan","last_name": "mukhtar","phone": "64763868"
}
它只保存电子邮件地址,电话、名字、姓氏不保存。 我已经在stackoverflow上搜索阅读了几乎所有问题,但没有任何运气,现在我在这里发帖,如果问题不清楚,请告诉我。
解决方法
您可以使用 create
函数来保存这样的用户数据。希望这个回答能帮助您解决问题。
def create(self,data):
u = User(username=data["username"],email=data["email"],phone=data["phone"],first_name=data["first_name"],last_name=data["first_name"])
u.set_password(data["password"])
u.save()
return u
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。