The Django docs only list examples for overriding save()
and delete()
. However, I\'d like to define some extra processing for my models onl
This is old, has an accepted answer that works (Zach's), and a more idiomatic one too (Michael Bylstra's), but since it's still the first result on Google most people see, I think we need a more best-practices modern-django style answer here:
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
# ...what needs to happen on create
post_save.connect(MyModel.post_create, sender=MyModel)
The point is this:
@classmethod
instead of @staticmethod
because most likely you'll end up needing to refer static class members in the codeEven cleaner would be if core Django would have an actual post_create
signal. (Imho if you need to pass a boolean arg to change behavior of a method, that should be 2 methods.)