使用Django social auth从User模型在子模型中创建实例

时间:2012-11-16 05:22:36

标签: django django-socialauth

我正在使用django social auth进行社交网络登录我的网站,并且用户信息存储在用户模型中工作正常。但我有另一个模型( ExtraInfo )继承用户模型来存储额外的数据。当django social auth在用户模型中创建新用户时,如何在子模型( ExtraInfo )中创建新实例

我试过了social_AUTH_USER_MODEL =' myapp.CustomUser'但这不起作用,因为create_user方法不适用于子模型

class ExtraInfo(User):
      phoneNo = models.CharField(max_length = 30)
      city = models.CharField(max_length = 30)
      state = models.CharField(max_length = 30)

2 个答案:

答案 0 :(得分:1)

取决于您的项目,但看起来您的ExtraInfo模型不应继承User模型,而是按@ miki725或django profiles提及的方式扩展。{ / p>

关于django-social-auth,您可以使用创建所需ExtraInfo模型的函数扩展默认pipeline(您可以使用is_new参数检查用户是否为新用户)。

如果用户是通过其他方式创建的,那么信号就是最佳选择。

答案 1 :(得分:0)

根据Django文档,为User添加属性的推荐方法是使用OneToOneField而不是子类化:

class ExtraInfo(models.Model):
    user = models.OneToOneField(User, related_name='extra_info')
    phoneNo = models.CharField(max_length = 30)
    city = models.CharField(max_length = 30)
    state = models.CharField(max_length = 30)

至于您的问题,您可以连接到Django的post_save信号(docs),然后只要created参数为True,就会创建ExtraInfo该新用户的模型。