Я хочу создать пользовательскую форму регистрации с этими полями:
имя пользователя
пароль
имя
фамилия
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",
]