首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

django

2013-09-05 
求助django我用django框架的admin管理页面我需要在admin管理页面的添加、删除操作之后进行——将数据库datare

求助 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”那一段

热点排行