Используя приложение django-custom-user на github, как я могу получить текущего пользователя, который только что создал адрес электронной почты

Я использую приложение django-custom-user на github: https://github.com/recreatic/django-custom-user

У меня есть сигнал, как определено:

@receiver(post_save, sender=EmailUser)
def user_saved(sender=None, **kwargs):
    print("Request finished!")
    user = kwargs["instance"]
    if kwargs["created"]:
        blah = Blah(user=get_user_model(), name="None")
        blah.save()

Прямо сейчас я получаю сообщение об ошибке: "Невозможно назначить": "Blah.user" должен быть экземпляром "EmailUser". Эта ошибка имеет смысл, потому что в описании github говорится, что нужно получить конкретный адрес электронной почты:

user = get_user_model().get(email="user@example.com")

У меня вопрос... учитывая, что это так, как я могу получить только что созданного пользователя? Не похоже, что у меня есть адрес электронной почты пользователя, который только что вошел в систему? Я делаю это через администратора Django, кстати. Это синонимы в представлениях, вы можете использовать request.user. Но я предполагаю, что не могу сделать это сейчас здесь.

Может кто-нибудь объяснить, что аргументы в этих обратных вызовов в сигналах? Эта функция обратного вызова имеет произвольное имя user_saved, но каким-то образом она получает аргументы "sender" и "kwargs". Откуда они берутся и где я могу найти список аргументов для этих обратных вызовов?

1 ответ

Вместо:

blah = Blah(user=get_user_model(), name="None")

Просто используйте:

blah = Blah(user=kwargs["instance"], name="None")

Это потому что Blah() ожидает экземпляр, а не модель класса.

Приемник сигнала всегда имеет sender в качестве первого аргумента, а затем ряд переменных аргументов (вот почему *kwargs требуется) как объяснено в документации сигналов. Список post-save Аргументы можно найти в документации после сохранения.

Другие вопросы по тегам