Мне интересно, возможно ли выборочно подавить сигнал Django (например, post_save
или post_init
) при создании объекта или, альтернативно, отправить ему определенные параметры.
То, что у меня есть, это User
объект, который можно создавать различными способами и в разных местах моего кода. Поэтому, чтобы автоматически назначать пользовательский объект Profile
каждому User
, я использую сигнал post_save
. Однако в одном конкретном случае есть дополнительная информация, которую я хочу привязать к созданному объекту Profile
. Передача его в качестве аргументов сигналу post_save
была бы полезной, но это не представляется возможным.
Другой вариант - создать объект Profile
вручную, но мне нужно сделать это после сохранения User
, иначе Profile
не может быть привязан к экземпляру User
. Однако сохранение экземпляра User
приводит к созданию другого Profile
с помощью функции, вызываемой сигналом.
И я не могу просто получить только что созданный объект Profile
, так как это приводит к ошибке 'Profile' object is unsubscriptable
. Любой совет?
Обновление:
Вот пример возможной ситуации:
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, где она должна храниться как часть объекта Profile
?