Zastanawiam się, czy można selektywnie wyłączyć sygnał Django (np. post_save
lub post_init
) podczas tworzenia obiektu lub, alternatywnie, przesłać mu określone parametry.Czy można selektywnie wyłączyć sygnał post_save (lub inny) w Django?
Mam obiekt User
, który można utworzyć na wiele różnych sposobów i miejsc w moim kodzie. Aby automatycznie przypisać niestandardowy obiekt Profile
do każdego User
, używam sygnału post_save
. Jednak w jednym konkretnym przypadku istnieją dodatkowe informacje, które chcę powiązać z utworzonym obiektem Profile
. Podanie go jako argumentu do sygnału post_save
byłoby wspaniałe, ale nie wygląda to na możliwe.
Inną opcją jest ręczne utworzenie obiektu Profile
, lecz następnie trzeba aby po User
jest zapisany, w przeciwnym razie Profile
nie może być związana z przykładu User
. Zapisanie instancji User
powoduje jednak utworzenie kolejnego Profile
za pośrednictwem funkcji wywoływanej przez sygnał.
I nie mogę po prostu uzyskać właśnie utworzonego obiektu Profile
, ponieważ powoduje to błąd 'Profile' object is unsubscriptable
. Jakakolwiek rada?
Aktualizacja:
Oto przykład możliwej sytuacji:
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()
Jak uzyskać zmiennej extra_param
w metodzie do metody createUserProfile, gdzie ma być zapisany signup
jako część obiektu Profile
?
+1. Chciałbym poznać odpowiedź na to pytanie. – PeanutButterJelly