如何检测Django模型对象的添加/删除?
当我添加或删除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)
1 个回答
5
你可以使用Django的信号功能,在保存或删除模型之前或之后调用特定的函数(如果需要的话,也可以在其他时候调用)。你可以在这里查看相关的文档:http://docs.djangoproject.com/en/dev/topics/signals/
如果你重写了模型的方法,当你从查询集中批量删除对象时,你的delete()
方法不会被调用(具体可以查看这里)。
你可以使用signal.connect
将多个信号连接到同一个方法上。