Можно ли выборочно подавить сигнал post_save (или другой) в Django?

Мне интересно, можно ли выборочно подавить сигнал 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 , где он должен храниться как часть объекта Профиль ?

6
задан Herman Schaaf 27 January 2011 в 22:47
поделиться