Mi chiedo se sia possibile sopprimere selettivamente un segnale Django (come post_save
o post_init
) sulla creazione dell'oggetto o, in alternativa, inviarlo determinati parametri.È possibile sopprimere selettivamente un segnale post_save (o altro) in Django?
Quello che ho è un oggetto User
, che può essere creato in molti modi e luoghi diversi nel mio codice. Quindi per assegnare automaticamente un oggetto personalizzato Profile
a ogni User
, io uso il segnale post_save
. Tuttavia, in un caso specifico, vi sono informazioni aggiuntive che desidero associare all'oggetto Profile
creato. Passarlo come argomento al segnale post_save
sarebbe ottimo, ma non sembra possibile.
L'altra opzione è quella di creare manualmente l'oggetto Profile
, ma poi devo che dopo la User
è salvato, altrimenti la Profile
non può essere vincolato a un'istanza User
. Salvando l'istanza User
, tuttavia, viene creato un altro Profile
creato tramite la funzione chiamata dal segnale.
E non riesco a ottenere l'oggetto appena creato Profile
, dal momento che si verifica un errore 'Profile' object is unsubscriptable
. Qualche consiglio?
Aggiornamento:
Ecco un esempio di una possibile situazione:
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()
Come faccio ad avere la variabile extra_param
nel metodo signup
al metodo createUserProfile, dove deve essere memorizzato come parte dell'oggetto Profile
?
+1. Mi piacerebbe sapere la risposta a questo. – PeanutButterJelly