【发布时间】:2013-08-22 16:11:37
【问题描述】:
我有以下models.py:
class BagOfApples(models.Model):
quantity = models.PositiveSmallIntegerField(default = 0)
让我们创建一个“苹果袋”对象并在其中放入一个“苹果”:
>>> from myapp import models
>>>
>>> models.BagOfApples().save()
>>>
>>> bag1 = models.BagOfApples.objects.get(pk = 1)
>>> bag2 = models.BagOfApples.objects.get(pk = 1)
>>>
>>> bag1.quantity += 1
>>> bag1.save()
>>>
>>> bag1.quantity
1
>>> bag2.quantity
0
有没有办法自动重新加载bag2变量中的数据?
在我的实际应用程序中,事情比这要复杂一些,相同的对象在被不同的数据库查询检索到后,可以在代码的不同部分进行修改。这甚至不是故意的(例如,这个问题发生在我身上,因为 Django 缓存了 OneToOne 或 ForeignKey 关系的结果)。
拥有某种管理器(也许中间件可以做到这一点?)来跟踪相同的对象会非常有帮助。
在此示例中,管理器会自动检测到 bag2 实际上是 bag1,并且不会执行第二个查询,而只是返回 bag1。
如果没有很好的方法来做到这一点,任何其他关于更好的应用程序设计的有用提示将不胜感激。
【问题讨论】:
标签: django django-models django-database