2012-01-18 10 views
5

Mogłem przysiąc, że czytałem wcześniej pytanie na ten temat, ale nie mogę go znaleźć, więc:Jak mogę uruchomić kod po wywołaniu metody zapisu modelu Django po raz pierwszy?

W Django, jak mogę uruchomić kod po zapisaniu nowej instancji modelu w bazie danych?

Wiem, że mogę napisać niestandardową metodę MyModel().save(), aby uruchomić kod po zapisaniu instancji modelu. Ale jak uruchomić kod tylko wtedy, gdy instancja modelu jest zapisana po raz pierwszy?

Odpowiedz

5

dokumentacji Django było trudne dla mnie do grok w pierwszym, tutaj jest bardziej wyraźny przykład

from django.db.models.signals import post_save 
from yourapp.models import YourModel 

def model_created(sender, **kwargs): 
    the_instance = kwargs['instance'] 
    if kwargs['created']: 
     do_some_stuff(the_instance) 

post_save.connect(model_created, sender=YourModel) 
+0

Hmmmm. Nigdy nie lubiłem sygnałów (straszna akcja na odległość). Również - jest to dość osobliwe, aby to zrobić na dwa różne sposoby - przesłonięcie save() pod ręką i sygnał po drugiej. –

+0

Brakuje ":" w definicji model_created – rsm

4

Ah tak: the post_save signal podaje argument o nazwie created, który jest True, jeśli jego wystąpienie zostało utworzone przez wywołanie save().

+2

Można również sprawdzić, czy self.pk istnieje w sposób zaoszczędzić - często wybór, że zrobię w zależności od złożoności . Ustawianie znacznika czasu przed auto_now_add istniało na przykład :) –

Powiązane problemy