Django all-auth: не показывает имя и фамилию при регистрации новой учетной записи

Я использую 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>

Это потому что вы поставили blank=True.

Willem Van Onsem 15.06.2019 19:49

Кроме того, вам следует создать подкласс нетMeta из UserCreationForm.

Willem Van Onsem 15.06.2019 19:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
2 473
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Здесь есть некоторые проблемы. Прежде всего, я не уверен, что вы хотите установить 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 15.06.2019 23:14

@sreekanthkura7: вы уверены, что используете правильную форму?

Willem Van Onsem 15.06.2019 23:20

Я использую библиотеку 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 15.06.2019 23:30

@sreekanthkura7: но где вы указываете, что здесь следует использовать ваш CustomUserCreationForm?

Willem Van Onsem 15.06.2019 23:30

Это хороший вопрос. Вы знаете, где я могу это сделать в django-allauth? Спасибо!

sreekanthkura7 15.06.2019 23:32

@sreekanthkura7: вам нужно будет указать это в своем urls.py, например, в SignupView.as_view(form_class=CustomUserCreationForm).

Willem Van Onsem 15.06.2019 23:36

Я добавил ACCOUNT_SIGNUP_FORM_CLASS = "users.forms.CustomUserCreationForm" в settings.py. Теперь это начало работать. Большое спасибо за Вашу помощь!

sreekanthkura7 15.06.2019 23:39
blank=True означает, что пользователям не потребуется заполнять значение в формы, а null=True означает, что значения NULL будут разрешены на уровне БД. В этой ситуации, возможно, лучшим вариантом будет blank=False, null=True — последнее для гибкости.
Namgyu Ho 03.01.2020 21:40
Ответ принят как подходящий

В соответствии с Документы вы можете переопределить форму регистрации. Значения по умолчанию:

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.

Это работает для вас?

Другие вопросы по теме