To jest stare, ma akceptowaną odpowiedź, która działa (Zach) i bardziej idiomatyczną (Michaela Bylstry), ale ponieważ jest to nadal pierwszy wynik w Google, który większość ludzi widzi, myślę, że potrzebujemy więcej najlepszych praktyk modern-django stylowa odpowiedź tutaj :
from django.db.models.signals import post_save
class MyModel(models.Model):
@classmethod
def post_create(cls, sender, instance, created, *args, **kwargs):
if not created:
return
post_save.connect(MyModel.post_create, sender=MyModel)
Chodzi o to:
- używaj sygnałów (przeczytaj więcej tutaj w oficjalnej dokumentacji )
- użyj metody do ładnej przestrzeni nazw (jeśli ma to sens) ... i oznaczyłem ją jako
@classmethod
zamiast, @staticmethod
ponieważ najprawdopodobniej będziesz musiał odwoływać się do statycznych członków klasy w kodzie
Jeszcze czystsze byłoby, gdyby rdzeń Django miał rzeczywisty post_create
sygnał. (Imho, jeśli musisz przekazać argument logiczny, aby zmienić zachowanie metody, powinny to być 2 metody).