Создайте экземпляр в подмодели из модели пользователя, используя социальную аутентификацию Django.

Я использую django social auth для входа в социальную сеть на свой сайт, и он отлично работает, информация о пользователе хранится в модели User. Но у меня есть другая модель (ExtraInfo), которая наследует модель user для хранения дополнительных данных. Как создать новый экземпляр в подмодели (ExtraInfo), когда новый пользователь создается в модели пользователя с помощью социальной аутентификации django

Я пробовал 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)

person Troy Matt    schedule 16.11.2012    source источник


Ответы (2)


Согласно документам 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 для этого нового пользователя.

person miki725    schedule 16.11.2012

Зависит от вашего проекта, но похоже, что ваша модель ExtraInfo не должна наследоваться от модели User, а должна расширять ее, как указано @miki725, или с помощью профили Django.

Что касается django-social-auth, вы можете расширить конвейер по умолчанию. с функцией, которая создает нужную модель ExtraInfo (вы можете проверить, является ли пользователь новым, с помощью аргумента is_new).

Если пользователи создаются другими способами, тогда лучше всего использовать сигнал.

person omab    schedule 16.11.2012