我正在使用Django / Postgresql,我想构建某种媒体播放器行为:在被问到时开始播放,播放直到进一步命令,并在被问到时停止播放。
我的Django模型设计如下:
代码如下:
state = models.BooleanField(default=False)
def switchState(self):
print 'switching from %s to %s' % (self.state, not(self.state))
self.state = not(self.state)
self.save()
if self.state :
self.loop()
def loop(self):
while self.state:
print 'looping'
time.sleep( 1 )
print 'stopped looping'
行为:
我无法获得该死的州属性的最新值。 我一定错过了什么,但是什么?
感谢您的帮助!
答案 0 :(得分:0)
好的,我终于找到了答案。正如丹尼尔罗斯曼告诉我的那样,问题由于循环函数而导致,循环函数在自己的事务中循环,无法查看另一个事务中发生的事情。
我首先尝试使用新的refresh_from_db()函数强制刷新我的实例,但这根本不起作用(我仍然不明白为什么,请告诉我,如果你知道的话)。
正如Daniel建议的那样,我再次阅读了Django事务文档,最后找到了一个似乎有效的解决方案。我们的想法是允许循环函数使用带有transaction.atomic()命令的更新每个循环的实例。
tableView.setItems(data)
Nb:你不能用
TableView
而不是
List
也许这不是正确的做法,如果我错了,请随时纠正我。