遇到这个问题并找到了两个确定的解决方案后,我认为值得再次提出答案。
这是MySQL默认事务模式的问题。Django首先会打开一个事务,这意味着默认情况下您不会看到数据库中所做的更改。
这样演示
在终端1中运行django shell
>>> MyModel.objects.get(id=1).my_field
u'old'
还有另一个在2号航站楼
>>> MyModel.objects.get(id=1).my_field
u'old'
>>> a = MyModel.objects.get(id=1)
>>> a.my_field = "NEW"
>>> a.save()
>>> MyModel.objects.get(id=1).my_field
u'NEW'
>>>
回到终端1演示问题-我们仍然从数据库中读取旧值。
>>> MyModel.objects.get(id=1).my_field
u'old'
现在在1号航站楼中演示解决方案
>>> from django.db import transaction
>>>
>>> @transaction.commit_manually
... def flush_transaction():
... transaction.commit()
...