Почему сигналы Django не отправляются на создание профиля пользователя для социальной регистрации или входа?
У меня есть пользовательская модель регистрации. Я использую сигналы для создания профиля пользователя, когда кто-либо регистрируется или создает аккаунт. Но мои сигналы не отправляются, когда кто-либо создает аккаунт, используя учетную запись в социальных сетях, таких как facebook, twitter и т.д. Я хочу создать профиль пользователя с помощью сигналов для социальной регистрации или входа. Я использую social-auth-app-django
#UserProfile
class UserProfile(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name="userprofile")
mobile = models.IntegerField(blank=True,null=True)
country = models.CharField(max_length=200,blank=True,null=True)
class Subscriber(models.Model):
user = models.OneToOneField(UserManagement, on_delete=models.CASCADE, primary_key=True)
email = models.EmailField(max_length=1000)
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
#subscriber_signals
@receiver(post_save, sender=Subscriber)
def user_is_created_or_save(sender,instance,created,**kwargs):
user = instance.user
password = instance.user.password
username= instance.user.username
first_name = instance.first_name
last_name = instance.last_name
email = instance.email
user_id = instance.user.id
is_subscriber = instance.user.is_subscriber
um = UserManagement(id=user_id,email=email,username=username,password=password,first_name=first_name,last_name=last_name,is_subscriber=is_subscriber )
um.save()
if created:
UserProfile.objects.create(user=user)
Поскольку пользовательская модель определена, вы не можете использовать from django.contrib.auth.models import User
. Это также не рекомендуется для ссылки на модель пользователя.
Как описано в docs
, если вы правильно настроили пользовательскую модель, вы можете использовать settings.AUTH_USER_MODEL
для ссылки на вашу пользовательскую модель в качестве отправителя:
from django.conf import settings
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def user_is_created_or_save(sender, instance, created, **kwargs):
...