Django CacheMachine中的错误忽略了模型的保存?

时间:2015-02-05 05:03:18

标签: python django django-orm django-cache-machine

我有一个非常简单的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 makemigrationsmanage.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的测试。他们都过去了。

2 个答案:

答案 0 :(得分:1)

您确定要对我的分支运行此测试吗?这是我遇到的问题(类似),并用它解决了。

每次保存都应使与模型相关的所有查询集无效。所以在这种情况下,在x.save()之后,对象MyClass不应该在缓存中有任何信息。

我已经测试并且在我的情况下正常工作,使用Redis作为nocache db。

答案 1 :(得分:1)

我刚刚在Windows机器上测试了我的叉子,我现在自己检查一下:

图片检查:http://oi61.tinypic.com/2w5jf9d.jpg

Github网址:https://github.com/asketsus/django-cache-machine