Включите сигнал только для входа в систему google
У меня есть панель клиента, в которой клиент может зарегистрироваться, заполнив форму создания пользователя или через вход через google. Чтобы пользователь мог войти в систему с помощью google, я создал сигнал следующим образом:
@receiver(post_save, sender = CustomUser)
def customer_create(sender, instance, created, *args, **kwargs):
if created:
instance.is_customer = True
instance.save()
customer = Customer.objects.create(user=instance)
customer.username = instance.username
customer.email = instance.email
customer.first_name = instance.first_name
customer.last_name = instance.last_name
customer.save()
он работает нормально для пользователей, которые подписаны через google. Но когда пользователь пытается зарегистрироваться через форму, возникает нарушение дублирования значения ключа, так как он также работает с сигналом.
Как я могу включить сигнал только для пользователей, которые вошли через google?
Сигнал будет выполняться для каждого post_save
действия, которое может произойти для модели CustomUser
. Поэтому вы не можете сделать его условным только для пользователей, которые вошли в систему через google.
Если вы действительно хотите сделать это таким образом, предполагая, что вы знаете, как пользователь зарегистрировался в вашей платформе, вы можете сделать что-то вроде этого:
if instance.signup_method === "google":
return
if created:
instance.is_customer = True
instance.save()
...
Хотя, вы также можете рассмотреть возможность переопределения метода сохранения модели CustomUser.