2

添加或删除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)    
4

1 回答 1

5

您应该使用 Django 的信号在保存或删除模型之前或之后调用特定函数(如果需要,也可以在其他时间)。在此处查看相关文档:http: //docs.djangoproject.com/en/dev/topics/signals/

如果您覆盖模型方法,delete()则在从查询集中批量删除对象时不会调用您的方法(请参见此处)。

您可以使用 将多个信号连接到相同的方法signal.connect

于 2011-02-02T07:11:51.447 回答