添加或删除Foo
类型的对象时,我需要进行相同的计算。如何检测Foo
模型的对象的添加/删除?例如:
from django.db import models
class Foo(models.Model):
...
def save(self):
#do some processing
def delete(self):
#do some processing
我可以避免这两种方法中的代码重复吗?
使用信号可以像
一样实现from django.db import models
from django.db.models.signals import post_save, post_delete
class Foo(models.Model):
...
...
def foo_handler(sender, **kwargs):
#do some processing
post_save.connect(foo_handler, sender=Foo)
post_delete.connect(foo_handler, sender=Foo)
答案 0 :(得分:5)
在保存或删除模型之前或之后(以及其他时候,如果需要),您应该使用Django的信号来调用特定函数。请在此处查看相关文档:http://docs.djangoproject.com/en/dev/topics/signals/
如果覆盖模型方法,则从查询集批量删除对象时不会调用delete()
(请参阅here)。
您可以使用signal.connect
将多个信号连接到同一方法。