使用Django allauth注册自定义用户

4

我有一个自定义的用户模型:

class User(AbstractUser):
    phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
    phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=False, null=False) # validators should be a list
    email = models.EmailField(blank=False, null=False)
    points = models.PositiveIntegerField(default=0)

    REQUIRED_FIELDS = ['phone_number', 'email']

    objects = UserManager()

使用UserManager:

class UserManager(BaseUserManager):
    def create_user(self, username, email, phone_number, password):
        if not username:
            raise ValueError('Users must have a username')
        if not email:
            raise ValueError('Users must have an email address')
        if not phone_number:
            raise ValueError('Users must have a phone_number')

        user = self.model(
            username,
            phone_number,
            email=self.normalize_email(email)
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, email, phone_number, password):
        if not username:
            raise ValueError('Users must have a username')
        if not email:
            raise ValueError('Users must have an email address')
        if not phone_number:
            raise ValueError('Users must have a phone_number')

        user = self.create_user(
            username,
            phone_number,
            email=self.normalize_email(email)
        )

        user.set_password(password)
        user.is_superuser = True
        user.save(using=self._db)
        return user

我正在使用allauth来注册用户,但是当我在/rest-auth/registration (POST)中注册一个新用户时,字段仍然是默认的(用户名、电子邮件、密码1、密码2),而不是添加phone_number之类的字段。我该如何允许更多(或删除一些)字段来注册新用户?

=== 编辑 ===

另外,在我的settings.py中有以下内容:

AUTH_USER_MODEL = 'userTest.User'
ACCOUNT_SIGNUP_FORM_CLASS = 'userTest.forms.RegisterForm'

在forms.py中有一个仅用于测试的表单,但似乎无法正常工作:

并在forms.py中添加了一个仅用于测试的表单,但它似乎无法正常工作:

class RegisterForm(forms.Form):
    phone_number = forms.CharField(label='Phone Number', max_length=17)
    first_name = forms.CharField()

    def signup(self, request, user):
        user.phone_number = self.cleaned_data['phone_number']
        user.first_name = self.cleaned_data['first_name']
        user.save()
1个回答

0

你需要扩展AbstractBaseUser

from django.contrib.auth.models import (AbstractBaseUser, BaseUserManager)

    class User(AbstractBaseUser):
        phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
        phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=False, null=False) # validators should be a list
        email = models.EmailField(blank=False, null=False)
        points = models.PositiveIntegerField(default=0)

        REQUIRED_FIELDS = ['phone_number', 'email']

        objects = UserManager()

但是AbstractBaseUser是AbstractUser的超类,所以它只有较少的字段。无论如何,这会有什么区别吗?PS:请查看我编辑后的问题,也许您对我添加的内容了解一些。 - epord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接