我正在使用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()
我只是添加了随机内容,以便查看是否正在创建该内容,但是由于某种原因,当用户注册时,他们的个人资料并未创建。我在做什么错了?
答案 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