1

Я боролся с реализацией разных ответов для обработки (например, Django-Registration & Django-Profile, using your own custom form), но мне не удалось заставить это работать в моем проекте, потому что оно кажется слишком устаревшим.Создать дополнительную модель при активации django-registration

По существу, я установил Django-Registration в свой проект и могу выполнить аутентификацию пользователя и создать через него.

Однако, я продлил пользователя с помощью следующей модели UserProfile:

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    account_type = models.IntegerField(null = True, default= 1) 
    daily_message = models.BooleanField(default = True) 
    tel_number = models.CharField(max_length=20, null = True) 

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

И я хотел бы, что либо:

  1. UserProfile с нулевыми значениями/по умолчанию создается для каждого пользователя (пользователь может обновить это позже)
  2. Пользователь может ввести телефон номер с другой информацией при регистрации.

Ниже зацепил в моем urls.py:

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^accounts/', include('registration.backends.hmac.urls')), 
    url(r'^', include('app.urls')) 
] 

Как у меня нет видимости по любому из Джанго-регистрационных форм и много документации описывает модель пользовательского пользователя (который У меня нет), какие-то идеи, как я мог бы сделать одно из вышеперечисленных?

ответ

2

Существует множество способов, с помощью которых эта задача может быть достигнута, самый метод, подобный джанго, должен был бы полагаться на сигнал. Более конкретно, сигнал user_registered.

registration.signals.user_registered Отправлено, когда зарегистрирована новая учетная запись пользователя . Предоставляет следующие аргументы:

Отправитель Подкласс регистрацииView используется для регистрации учетной записи.
пользователь экземпляр пользовательской модели, представляющий новую учетную запись.
запрос HttpRequest, в котором зарегистрирована новая учетная запись.

def create_user_profile(sender, user, requet): 
    ''' 
    Creates a profile object for registered users via the 
    user_registered signal 
    ''' 

    obj = UserProfile.objects.get_or_create(user=user) 

Альтернативой является подкласс RegistrationView. Второй вариант - уловить сигнал post_save для пользователя.

Смежные вопросы