Me pregunto si es posible suprimir selectivamente una señal de Django (como post_save
o post_init
) en la creación del objeto, o, como alternativa, enviarle ciertos parámetros.¿Es posible suprimir selectivamente una señal post_save (u otra) en Django?
Lo que tengo es un objeto User
, que se puede crear de muchas formas y lugares en mi código. Entonces, para asignar automáticamente un objeto personalizado Profile
a cada User
, uso la señal post_save
. Sin embargo, en un caso específico, hay información adicional que quiero vincular al objeto Profile
creado. Pasarlo como argumentos a la señal post_save
sería genial, pero no parece posible.
La otra opción es crear manualmente el objeto Profile
, pero entonces necesito que después de la User
se guarda, de lo contrario el Profile
no puede estar vinculado a una instancia User
. Sin embargo, al guardar la instancia User
, se crea otro Profile
a través de la función llamada por la señal.
Y no puedo obtener el objeto recién creado Profile
, ya que da como resultado un error 'Profile' object is unsubscriptable
. ¿Algún consejo?
Actualización:
Aquí es un ejemplo de una posible situación:
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()
¿Cómo consigo la variable extra_param
en el método signup
al método createUserProfile, donde se va a almacenar como parte del objeto Profile
?
+1. Me encantaría saber la respuesta a esto. – PeanutButterJelly