在激活django-registration上创建其他模型

时间:2016-07-25 20:43:21

标签: django django-models django-forms django-admin django-registration

我一直在努力实现处理不同的答案(例如Django-Registration & Django-Profile, using your own custom form)但是没有设法让它在我的项目中起作用,因为它似乎太过时了。

基本上我已经在我的项目中安装了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. 用户可以输入电话 有关注册的其他详细信息。
  3. 以下内容链接在我的URLs.py:

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

    由于我对任何Django注册表单都没有可见性,而且很多文档描述了一个自定义用户模型(我没有),任何想法如何才能做到以上其中一种?

1 个答案:

答案 0 :(得分:2)

有很多不同的方法可以实现这项任务,大多数类似django的方法都依赖于信号。更具体地说是user_registered信号。

  

registration.signals.user_registered在新用户帐户发送时发送   注册。提供以下参数:

     

发件人用于注册帐户的RegistrationView子类   用户表示新帐户的用户模型实例   请求   新帐户已注册的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。第二种方法是在User上捕获post_save信号。

相关问题