我有一个非常简单的Django类:
from django.db import models
class MyClass(models.Model):
a = models.IntegerField()
b = models.IntegerField()
def __str__(self):
return "MyClass #%s: a: %s, b %s" % (self.pk, self.a, self.b)
当我执行CRUD类型的操作时,这个类工作正常:
>>> from statistics.models import MyClass
>>> print MyClass.objects.all()
[]
>>> x = MyClass(a=6, b=10)
>>> print MyClass.objects.all()
[]
>>> print x
MyClass #None: a: 6, b 10
>>> x.save()
>>> print MyClass.objects.all()
[<MyClass: MyClass #2: a: 6, b 10>]
>>>
现在我在类定义中添加/修改3行以启用CacheMachine:
from caching.base import CachingManager, CachingMixin # This line added
from django.db import models
class MyClass(CachingMixin, models.Model): # Added a Mix-in
a = models.IntegerField()
b = models.IntegerField()
objects = CachingManager() # This line added
def __str__(self):
return "MyClass #%s: a: %s, b %s" % (self.pk, self.a, self.b)
在manage.py makemigrations
和manage.py migrate
之后,我截断数据库,刷新memcached并运行我之前运行的相同实验。
但是那个实验失败了!保存新创建的MyClass实例后,查询数据库显示它不存在。为什么?如何解决这个问题?有没有人见过这个?
>>> print MyClass.objects.all()
[]
>>> x = MyClass(a=6, b=10)
>>> print MyClass.objects.all()
[]
>>> print x
MyClass #None: a: 6, b 10
>>> x.save()
>>> print MyClass.objects.all()
[]
仅供参考,我运行了显示为here的Django Cache Machine的测试。他们都过去了。
答案 0 :(得分:1)
您确定要对我的分支运行此测试吗?这是我遇到的问题(类似),并用它解决了。
每次保存都应使与模型相关的所有查询集无效。所以在这种情况下,在x.save()之后,对象MyClass不应该在缓存中有任何信息。
我已经测试并且在我的情况下正常工作,使用Redis作为nocache db。
答案 1 :(得分:1)
我刚刚在Windows机器上测试了我的叉子,我现在自己检查一下: