Ошибка типа в / user / signup / Siteuser () получила неожиданный аргумент ключевого слова 'is_staff' - PullRequest
0 голосов
/ 07 марта 2020

Я хочу создать пользовательскую форму регистрации с этими полями:

имя пользователя

пароль

имя

фамилия

email

номер телефона

с моделью пользователя, дополнительные поля не сохраняются в базе данных mysql. я создаю модель AbstractBaseUser и использую ее для хранения данных, но я получил эту ошибку:

Ошибка типа в / user / signup / Siteuser () получила неожиданный аргумент ключевого слова 'is_staff'

models.py

class Siteuser(AbstractBaseUser):
    objects = UserManager()
    USERNAME_FIELD = 'username'
    firstname = models.CharField(max_length=100, verbose_name='First name', validators= [validate_firstname_length])
    lastname = models.CharField(max_length=100, verbose_name='Last name', validators= [validate_lastname_length])
    username = models.CharField(max_length=25, verbose_name= 'User name', validators= [validate_username_length, validate_username_alphadigits])
    password1 = models.CharField(max_length=30, validators=[validate_password_length, validate_password_digit, validate_password_uppercase])
    password2 = models.CharField(max_length=30)
    email = models.EmailField()
    phone = models.CharField(max_length= 15, validators= [validate_phonenumber])

    def __str__(self):
        return self.user.username


@receiver(post_save, sender=User)
def update_profile_signal(sender, instance, created, **kwargs):
    if created:
        Siteuser.objects.create(user=instance)
    instance.siteuser.save()

views.py

def signup(request):
    firstname = ''
    lastname = ''
    emailvalue = ''
    uservalue = ''
    passwordvalue1 = ''
    passwordvalue2 = ''

    form = forms.Signupform(request.POST or None)
    if form.is_valid():
        fs = form.save(commit=False)
        firstname = form.cleaned_data.get("first_name")
        lastname = form.cleaned_data.get("last_name")
        emailvalue = form.cleaned_data.get("email")
        uservalue = form.cleaned_data.get("username")
        passwordvalue1 = form.cleaned_data.get("password1")
        passwordvalue2 = form.cleaned_data.get("password2")
        if passwordvalue1 == passwordvalue2:
            if models.Siteuser.objects.filter(username=form.cleaned_data['username']).exists():
                context = {'form': form,
                           'error': 'The username you entered has already been taken. Please try another username.'}
                return render(request, 'user/signup.html', context)
            else:
                user = models.Siteuser.objects.create_user(
                    form.cleaned_data['username'],
                    form.cleaned_data['email'],
                    form.cleaned_data['password1']
                )
                user.save()

                login(request, user)

                fs.user = request.user

                fs.save()
                context = {'form': form}
                return render(request, 'user/signup.html', context)

        else:
            context = {'form': form, 'error': 'The passwords that you provided don\'t match'}
            return render(request, 'user/signup.html', context)

    else:
        context = {'form': form}
        return render(request, 'user/signup.html', context)

forms.py

class Signupform(forms.ModelForm):

    firstname = forms.CharField(label='First Name')
    lastname = forms.CharField(label='Last Name')
    username = forms.CharField(label='Username')
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Confirm Password', widget=forms.PasswordInput)
    email = forms.EmailField(label='Email')
    phone = forms.CharField(label='Phone Number')

    class Meta:
        model = models.Siteuser
        fields = ["firstname",
                  "lastname",
                  "username",
                  "password1",
                  "password2",
                  "email",
                  "phone",
                  ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...