Django的数据同步问题

Django的数据同步问题,django,django-models,django-database,Django,Django Models,Django Database,我有以下型号.py: class BagOfApples(models.Model): quantity = models.PositiveSmallIntegerField(default = 0) 让我们创建一个“苹果袋”对象,并在其中放置一个“苹果”: >>> from myapp import models >>> >>> models.BagOfApples().save() >>> >>

我有以下
型号.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


如果没有很好的方法可以做到这一点,任何其他关于更好的应用程序设计的有用提示都将不胜感激。

关键是要了解您的查询何时实际执行。每次要访问模型对象的某个模型字段时,该模型对象都不会重复查询

为了避免保留过时数据的对象,我会确保在实际需要数据时进行查询。在您的示例中,我将保留您知道不会更改的信息(pk值),并在需要具有新值的对象时执行get

from myapp import models
models.BagOfApples().save()

bag1 = models.BagOfApples.objects.get(pk = 1)

bag1.quantity += 1
bag1.save()

print bag1.quantity  # will print 1

bag2 = models.BagOfApples.objects.get(pk = 1)
print bag2.quantity  # will print 1 too

谢谢马特的回复。我的问题是Django正在缓存一个ForeignKey关系,我通过在每次访问该关系时强制Django进行查询来解决这个问题。因此,我不再使用
my_model=object.foreign_model
而是使用
my_model=ForeignModel.objects.get(pk=object.foreign_model\u id)
。这正是您的建议(“…我会确保在实际需要数据时查询”)。但它仍然不能真正回答我的问题。如果能够尽可能地从缓存中获益,同时避免过时的数据,那就太好了。