我想在模型保存和删除数据时候进行一些其他操作。
查看文档,模型的保存可以重写。类似如下
models.py
class owgameserver(models.Model):
serverid = models.IntegerField(u"游戏服ID号",primary_key=True)
serverhost = models.GenericIPAddressField(u"游戏服IP")
servername = models.CharField(u"游戏服名称",max_length=32)
serverport = models.IntegerField(u"游戏服端口号")
def save(self,*args,**kwargs):
print '添加新服:服id:%s-服ip:%s-服名称:%s-服端口:%s' %(self.serverid,self.serverhost,self.servername,self.serverport)
super(owgameserver,self).save(*args,**kwargs)
print ansible_owgameserver_file
ansiblefile = open(ansible_owgameserver_file,'a')
ansiblefile.write('ow%s ansible_ssh_host=%s server_port=%s server_id=%s' %(self.serverid,self.serverhost,self.serverport,self.serverid))
ansiblefile.close()
print '添加完成.'
然后想写删除时候,发现文档是提供了信号来处理
然后我的处理如下
single.py
from models import owgameserver
from django.dispatch import receiver
from django.db.models.signals import post_delete,post_save
def del_ansible_host(sender,**kwargs):
print '删除文件中的列表'
post_delete.connect(del_ansible_host,sender=owgameserver)
def save_ansible_host(sender,**kwargs):
print '保存内容'
post_save.connect(save_ansible_host,sender=owgameserver)
然后发现,无论我是添加新的内容,还是删除内容都无法触发这两个信号里的内容,这是为咋的?
已自行解决,参考@小杰控的,和stackoverflow一些信息
使用信号后,调用pre_delete,post_save来触发models保存和删除后执行的一些操作
查看文档,在django 1.7后,使用信号时候需要在应用配置类中的ready() 方法中连接。
所以我们需要配置先ready()
需要在以下两个地方写入配置
需要在项目的app.py,__init__.py两个文件中写入配置
app.py中的内容
__init__.py中的内容
signals中的内容
测试在添加models和删除models是否会触发这个信号中的内容
添加一个新服
查看日志输出
已触发到保存的信号。
删除一个服
查看输出日志
已触发删除信息。