Включите сигнал только для входа в систему 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.

Вернуться на верх