Как избежать создания «имени пользователя» в django-auth

В моем проекте django мне нужно добавить функцию регистрации. Проблема в том, что в процессе регистрации я нигде не могу использовать «профиль пользователя». Мой пользователь определяется "имя", "фамилия" и некоторые другие данные. Как этого добиться? Помимо включения contrib.auth и «регистрации», я создал «пользовательское» приложение. В user.models у меня есть расширенная пользовательская модель с дополнительными полями. В user.forms я создал расширенную регистрационную форму:

class ExtendedRegistrationForm(RegistrationForm):
    first_name = forms.CharField(
        label="First name", 
        error_messages={'required': 'Please fill the first name field'},
        )
    last_name = forms.CharField(
        label="Last name",
        error_messages={'required': 'Please fill the last name field'},
        )

    def save(self, profile_callback=None):
        user = super(ExtendedRegistrationForm, self).save()
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()

В user.views у меня есть пользовательский вид регистра:

def custom_register(request, success_url=None,
           form_class=ExtendedRegistrationForm, profile_callback=None,
           template_name='registration/registration_form.html',
           extra_context=None):

    def _create_profile(user):                
        p = UserProfile(user=user)
        p.is_active = False
        p.first_name = first_name
        p.last_name = last_name
        p.save()

    return register(request, 
        success_url="/accounts/register/complete",
        form_class=ExtendedRegistrationForm,
        profile_callback=_create_profile,
        template_name='registration/registration_form.html',
        extra_context=extra_context,
        )

а также я переопределил URL-адреса регистрации для своего проекта:

url(r'^accounts/password/reset/$',
       auth_views.password_reset, { 'post_reset_redirect' : '/',
       'email_template_name' : 'accounts/password_reset_email.html' },
       name='auth_password_reset', ),
url(r'^accounts/password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
       auth_views.password_reset_confirm, { 'post_reset_redirect' : '/accounts/login/'},
       name='auth_password_reset_confirm'),
url(r'^accounts/password/reset/complete/$',
       auth_views.password_reset_complete,
       name='auth_password_reset_complete'),
url(r'^accounts/password/reset/done/$',
       auth_views.password_reset_done,
       name='auth_password_reset_done'),
url(r'^accounts/register/$',
    'user.views.custom_register',
    name='registration_register'),
(r'^accounts/', include('registration.urls')),

Итак, у меня есть хорошая база для начала, но как избавиться от «имени пользователя»? Могу ли я просто рассматривать имя пользователя как first_name (так много пользователей с одинаковым именем), или django будет жаловаться?


person trevor_nise    schedule 18.06.2010    source источник
comment
Вы имеете в виду, что вам нужно избавиться от имени пользователя в процессе входа в систему/авторизации?   -  person Bernhard Vallant    schedule 19.06.2010


Ответы (2)


Когда мне пришлось столкнуться с этим, самый простой способ — не включать в процесс регистрации «расширенный профиль пользователя». Когда они входят в систему в первый раз, перенаправьте их или отправьте им сообщение для заполнения форм. Это должно по крайней мере заставить вас идти на это. Я собираюсь заняться этим сам достаточно скоро, поэтому, когда я найду более конкретное решение, я опубликую его.

Я до сих пор также не уверен, что вы имеете в виду, когда не можете получить доступ к имени пользователя... это часть auth.models.User, поэтому оно доступно. Вы игнорируете базовые поля, уже доступные в Пользователе?...

person eruciform    schedule 07.07.2010
comment
Можете ли вы предложить, как переопределить поле имени пользователя, например, могу ли я сделать его атрибут пустым = True или я могу пропустить его, чтобы не использовать его ??? если так любезно объясните. Я расширяю модель django-auth, но мне не нужно использовать имя пользователя, но это дает мне ошибку при сохранении модели django-auth. - person jahmed31; 29.09.2017

Почему бы не сгенерировать имя пользователя при сохранении на основе first_name и last_name?

person Lexo    schedule 10.07.2010