求助 django
我用django框架的admin管理页面
我需要在admin管理页面的添加、删除操作之后进行——将数据库data reload到内存中 的操作,达到内存数据保持最新的目的,该怎么实现?
之前我在models.py 中重写了save()方法,添加了reload()操作,代码如下:
class Server(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
ip = models.IPAddressField()
area = models.ForeignKey(Area)
isp = models.ForeignKey(Isp)
state = models.ForeignKey(State)
lastupdate = models.DateTimeField(auto_now=True, auto_now_add=True)
createtime = models.DateTimeField(auto_now=True, auto_now_add=True)
def __unicode__(self):
return '%s IP:%s' % (self.name, self.ip)
def save(self):
models.Model.save(self)
MsgQueue.notify(NotifyMsg()) # reload()
我虽然再保存数据之后进行reload操作,可是由于admin的事务管理机制,在执行reload()时事务还没有提交,也即数据库中数据还没有变化,致使我的reload操作达不到目的。
请求大家帮忙,指点实现方式,非常感谢!!!
[解决办法]
试试用django的signals吧, 像post_save和post_delete应该比较适合你用
[解决办法]
post_save会把发生变化的model object直接传回来,个人觉得你不需要执行commit,你可以直接修改缓存里的数据,而不是把数据全部从数据库里重新读出来。
参考Django的官方文档3.21,
sender一般使用default值,不过你想指定sender是哪个model,参考
“Connecting to signals sent by specific senders”那一段