【问题标题】:How can I detect when objects of a Django model are added/deleted?如何检测何时添加/删除 Django 模型的对象?
【发布时间】:2011-06-19 18:54:55
【问题描述】:

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

【问题讨论】:

  • 没有。为什么?没有重复。太棒了。而且非常简单。以及每个人的期望。你不喜欢它的什么?

标签: python django django-models django-signals


【解决方案1】:

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

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

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

【讨论】:

  • 好点,来自管理器的批量方法通常发出单个查询,根本不会触发信号。
  • 如果这个答案有一个例子来完成它会很棒;现在它只是用户必须访问以获得答案的一组链接,而不是包含答案。见:meta.stackexchange.com/questions/8231/…
猜你喜欢
  • 2016-06-30
  • 1970-01-01
  • 2017-06-13
  • 2021-10-24
  • 2017-11-17
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
相关资源
最近更新 更多