Мне интересно, можно ли выборочно подавить сигнал Django (например, post_save
или post_init
) при создании объекта, или, в качестве альтернативы, отправьте ему определенные параметры.
У меня есть объект User
, который можно создать множеством разных способов и мест в моем коде. Итак, чтобы автоматически назначить пользовательский объект Профиль
каждому пользователю
, Я использую сигнал post_save
. Однако в одном конкретном случае есть дополнительная информация, которую я хочу привязать к созданному объекту Profile
. Было бы неплохо передать его в качестве аргументов в сигнал post_save
, но это не выглядит возможным.
Другой вариант - вручную создать объект Профиль
, но мне это нужно после сохранения пользователя
, иначе профиль
не может быть привязан к экземпляру пользователя
. Однако сохранение экземпляра User
приводит к созданию другого профиля
с помощью функции, вызываемой сигналом.
И я не могу просто получить только что созданный Профиль
объект, так как это приводит к 'Профиль' объект не подлежит подписке
ошибка. Есть совет?
Обновление:
Вот пример возможной ситуации:
def createUserProfile(sender, instance, created, **kwargs):
if created:
profile, created = Profile.objects.get_or_create(user=instance)
if extra_param:
profile.extra_param = extra_param
profile.save()
post_save.connect(createUserProfile, sender=User)
def signup(request):
...
extra_param = 'param'
user.save()
Как мне получить переменную extra_param
в методе signup
к методу createUserProfile , где он должен храниться как часть объекта Профиль
?