Python Django触发器更新后保存()

Python Django触发器更新后保存(),python,django,django-models,django-rest-framework,django-simple-history,Python,Django,Django Models,Django Rest Framework,Django Simple History,所以我使用django简单历史模块来跟踪模型实例中的更改。但是,它使用post_保存信号来执行此操作。在我的项目中,我还需要它在update()时触发 我的问题是:如何覆盖update()方法来触发post_save signals?这样做的问题是.update()不必从数据库加载对象来完成它的任务。在100万行的用户表上考虑这个例子: users = User.objects.filter(date_joined__lte=now() - timedelta(days=30) users.up

所以我使用django简单历史模块来跟踪模型实例中的更改。但是,它使用post_保存信号来执行此操作。在我的项目中,我还需要它在update()时触发


我的问题是:如何覆盖update()方法来触发post_save signals?

这样做的问题是
.update()
不必从数据库加载对象来完成它的任务。在100万行的用户表上考虑这个例子:

users = User.objects.filter(date_joined__lte=now() - timedelta(days=30)
users.update(is_active=False)
django在这里要做的不是从数据库中加载可能数十万行,只需将
is\u active
设置为False,然后分别保存每一行,而是通过数据库引擎直接发出
UPDATE
命令:
updateusers set is\u active=False,其中date\u加入<30天之前
。这是Django在更新时不触发
post_save
的唯一原因:因为它首先没有从数据库加载任何内容

为了触发信号,它需要从数据库加载所有这些对象,发出数据库查询
UPDATE users SET is_active=False,其中id=X
数千次,每行一次,然后发送信号。这将扼杀性能

如果您真的想使用该信号,则需要从数据库中加载对象,对其进行迭代,然后一次保存一个对象。不幸的是,没有办法解决这个问题。

每当创建或更新Django模型对象时,都会调用save()方法

例: 创建新的用户配置文件, 正在更新现有用户配置文件

我们可以使用Django信号发送邮件,通知用户这两种情况

为此,我们使用Django内置信号post_save

只要在Django模型实例上调用.save(),就会调度post_信号

我们可以在models.py中使用以下代码:

from django.db.models import signals
from django.dispatch import receiver
@receiver(signals.post_save, sender=Customer)
def on_create_or_updated_obj(sender, instance, **kwargs):
   if kwargs['created']:
      print 'obj created'
      #send user created email to user
   else:
      print 'obj updated'
      #logic for sending user updated email to user

或者,您可以使用save(),而不是update(),因为它已经调用post_save()?当平行世界渗透到一起时,会有这种感觉