注册后创建用户个人资料

时间:2019-02-05 05:34:32

标签: django django-models django-views

我正在使用Django Allauth。用户可以使用Google,Twitter,Facebook进行注册,也可以使用其电子邮件地址进行注册。注册后,其详细信息将存储在User表中。我还有一个称为Profile的模型,其中包含诸如bio, avatar, etc.之类的用户信息,我想在用户注册时为该用户创建个人资料。我查看了Allauth信号,发现user_signed_up信号是合适的。这是我在handlers.py文件中编写代码的方式:

@receiver(user_signed_up)
def create_profile(request, user):
    profile = Profile(avatar='img/blah/blah.jpg',  bio='Example text', gender='M', dob='2018-01-01',
                      country='US', user=user)
    profile.save()

我只是添加了随机内容,以便查看是否正在创建该内容,但是由于某种原因,当用户注册时,他们的个人资料并未创建。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

您必须确保以某种方式导入handlers.py模块,以便表示处理程序已注册,您可以编写

 import handlers

代码中的任何位置,但建议的位置是应用程序配置类的ready方法中。

参考文献:

https://chriskief.com/2014/02/28/django-1-7-signals-appconfig/ https://docs.djangoproject.com/en/2.1/ref/applications/

答案 1 :(得分:0)

您需要在用户模型实例保存信号起作用时编写信号,您需要在此条件下创建一个实例是新创建的,或在此条件下修改旧的,您可以创建配置文件

@receiver(post_save, sender=User)
def user_updated(sender, created=False, **kwargs):
    user = kwargs.get('instance', None)
    if user and created:
        ##create profile object here