Dies ist alt, hat eine akzeptierte Antwort, die funktioniert (Zach's), und eine idiomatischere (Michael Bylstra's), aber da es immer noch das erste Ergebnis bei Google ist, das die meisten Leute sehen, denke ich, brauchen wir einen modernen Best-Django mit mehr Best Practices Stil Antwort hier :
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)
Der Punkt ist folgender:
- Verwenden Sie Signale (lesen Sie mehr hier in den offiziellen Dokumenten )
- Verwenden Sie eine Methode für einen netten Namespace (wenn dies sinnvoll ist) ... und ich habe sie als
@classmethod
statt markiert, da @staticmethod
Sie höchstwahrscheinlich statische Klassenmitglieder im Code referenzieren müssen
Noch sauberer wäre es, wenn Core Django ein tatsächliches post_create
Signal hätte. (Imho, wenn Sie ein boolesches Argument übergeben müssen, um das Verhalten einer Methode zu ändern, sollten dies 2 Methoden sein.)