Это старый, имеет принятый ответ, который работает (Зак), и более идиоматический ответ (Майкл Билстра), но так как это все еще первый результат в Google, который большинство людей видит, Я думаю, что нам нужно больше лучшие практики в стиле модерн-джанго ответьте здесь :
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)
Дело в следующем:
- использовать сигналы (подробнее здесь, в официальных документах )
- используйте метод для хорошего пространства имен (если это имеет смысл) ... и я пометил его как
@classmethod
вместо @staticmethod
, потому что, скорее всего, вам в конечном итоге потребуется ссылаться на статические члены класса в коде
Даже чище было бы, если бы ядро Django имело фактический сигнал post_create
. (Имхо, если вам нужно передать логический аргумент, чтобы изменить поведение метода, это должно быть 2 метода.)