Я использую Django-all auth для создания учетных записей пользователей. Я хочу получить имя, фамилию, адрес электронной почты и пароль при регистрации. Но страница регистрации не показывает имя и фамилию. Страница регистрации показывает только адрес электронной почты и пароль. Может ли кто-нибудь помочь мне с этим? Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация. Спасибо!
Models.py
class CustomUser(AbstractUser):
# add additional fields in here
first_name = models.CharField(max_length=128, blank=True, null=True)
last_name = models.CharField(max_length=128, blank=True, null=True)
def __str__(self):
return self.email
Forms.py
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = CustomUser
fields = ('email','first_name','last_name')
Регистрация.html
<h2>Sign Up</h2>
<form method = "post">
{% csrf_token %}
{{ form.as_p }}
<button type = "submit">Sign Up</button>
</form>
Кроме того, вам следует создать подкласс нетMeta
из UserCreationForm
.
Здесь есть некоторые проблемы. Прежде всего, я не уверен, что вы хотите установить blank=True
[Джанго-док], так как это означает, что по умолчанию Django скроет эти поля от редактирования. Вы можете даже не захотеть делать эти null=True
[Джанго-док], так как это означает, что пользователи должны нет заполнять их. Вероятно, вы этого не хотите:
class CustomUser(AbstractUser):
first_name = models.CharField(max_length=128, null=True)
last_name = models.CharField(max_length=128, null=True)
def __str__(self):
return self.email
Что касается формы, вы должны нет подкласс Meta
от самого UserCreationForm
. Возможно, вы хотите создать подкласс из UserCreationForm.Meta
:
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = CustomUser
fields = ('email','first_name','last_name')
Благодарю за ваш ответ. Я изменил, как вы предложили, но это не сработало. На странице регистрации не отображаются поля first_name и last_name.
@sreekanthkura7: вы уверены, что используете правильную форму?
Я использую библиотеку Django-allauth, для этого я использую следующие настройки. # add customUser model AUTH_USER_MODEL = 'users.CustomUser' SITE_ID = 1 ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_USERNAME_REQUIRED = False ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False ACCOUNT_SESSION_REMEMBER = True ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_
@sreekanthkura7: но где вы указываете, что здесь следует использовать ваш CustomUserCreationForm
?
Это хороший вопрос. Вы знаете, где я могу это сделать в django-allauth? Спасибо!
@sreekanthkura7: вам нужно будет указать это в своем urls.py
, например, в SignupView.as_view(form_class=CustomUserCreationForm)
.
Я добавил ACCOUNT_SIGNUP_FORM_CLASS = "users.forms.CustomUserCreationForm" в settings.py. Теперь это начало работать. Большое спасибо за Вашу помощь!
blank=True
означает, что пользователям не потребуется заполнять значение в формы, а null=True
означает, что значения NULL будут разрешены на уровне БД. В этой ситуации, возможно, лучшим вариантом будет blank=False, null=True
— последнее для гибкости.
В соответствии с Документы вы можете переопределить форму регистрации. Значения по умолчанию:
ACCOUNT_FORMS = {
'add_email': 'allauth.account.forms.AddEmailForm'
'change_password': 'allauth.account.forms.ChangePasswordForm'
'disconnect': 'allauth.socialaccount.forms.DisconnectForm'
'login': 'allauth.account.forms.LoginForm'
'reset_password': 'allauth.account.forms.ResetPasswordForm'
'reset_password_from_key': 'allauth.account.forms.ResetPasswordKeyForm'
'set_password': 'allauth.account.forms.SetPasswordForm'
'signup': 'allauth.account.forms.SignupForm'
'signup': 'allauth.socialaccount.forms.SignupForm'
}
Это можно сделать, просто добавив ACCOUNT_FORMS = {'login': 'myapp.forms.CustomUserCreationForm'}
к вашему settings.py.
Это работает для вас?
Это потому что вы поставили
blank=True
.