python-social-auth和Django,用自定义模型替换UserSocialAuth

时间:2014-08-27 13:14:18

标签: python django django-models python-social-auth

我正在尝试将python-social-auth集成到现有的Django项目中。

我想为用户的社交帐户使用现有模型,而不是UserSocialAuth(我的数据库已经包含数据,以及一些自定义字段)。

有什么设置吗?

我的自定义模型如下所示:

class Channel(models.Model, DjangoUserMixin):
    PROVIDER_CHOICES = (
        ('twitter', 'Twitter'),
    )

    uid = models.CharField(max_length=255)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
                             related_name='channels')

    provider = models.CharField(max_length=32, choices=PROVIDER_CHOICES)
    extra_data = JSONField()

    class Meta:
        unique_together = ('provider', 'uid')

    @classmethod
    def get_social_auth(cls, provider, uid):
        try:
            return cls.objects.select_related('user').get(provider=provider, uid=uid)
        except Channel.DoesNotExist:
            return None

    username_max_length = 255
    user_model = get_user_model()

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

通过创建自定义Storage来解决:

# channels/models.py
# ...

class CustomSocialStorage(DjangoStorage):
    """To replace UserSocialAuth model with Channel"""
    user = Channel

在设置中注册:

SOCIAL_AUTH_STORAGE = 'proj.channels.models.CustomSocialStorage'

由于某些原因,此设置仅记录在Python-social-auth的文档的"Django" section中,而不是在“设置”页面上。