Используя приложение 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
Аргументы можно найти в документации после сохранения.