如何解决Django:当数据库发生更改时,异步执行某些功能的最简单方法是什么?
我很熟悉Oracle中的DBMS_ALERT功能,该功能会在数据库发生更改时向操作系统发送警报,并且通常对数据库触发器有所了解。我浏览了有关信号的django文档,如果没有更简单的方法,我倾向于使用它们。
只要数据库中有更新或创建的记录,我要做的就是在系统文件系统上更新或创建一个外部文件。我希望可以在models.py中调用并定义此方法,如下所示。
models.py
from django.db import models
from django.shortcuts import reverse
class Entry(models.Model):
subject = CharField(max_length=20,unique=True)
content = models.TextField(blank=False)
class Meta:
ordering = ['subject']
def __str__(self):
"""String for representing the Model object."""
return self.subject
def get_absolute_url(self):
"""Returns the url to access a detail record for this entry."""
return reverse('entry_detail',args=[int(self.id)])
def ondbchange_updatecorrfile(self):
# this method would be called upon change in the model Entry,so it is already aware of object
util.save_entry(self.subject,self.content) # file corresponding to row is updated or created
实现上述ondbchange_updatecorrfile(self)方法最简单的方法是什么?
我看过this source
中的以下代码models.py
class Entry(models.Model):
...
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save,sender=Entry)
def queue_task(sender,instance,created,**kwargs):
tasks.foo.delay(object=instance)
然后foo是另一个类中的某个函数,它将更新文件。由于数据库模型是知道模型基础数据库中更改的类,因此,如果所需功能已经在模型中并且“知道”数据库更改,我们真的需要使用信号吗?
任何帮助深表感谢。请具体说明,因为细节在其中。
解决方法
保存后,模型Entry发送了post_save信号,但是根据this source,该信号在其update_fields参数中不包括模型更改。必须将这些手动插入到发生save()的函数的重写中。达不到目的。我最初以为信号会自动包含此信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。