1

我有一个非常简单的 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 makemigrationsand之后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()
[]

仅供参考,我对此处显示的 Django Cache Machine 进行了测试。他们都通过了。

4

2 回答 2

1

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

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

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

于 2015-02-08T00:55:16.490 回答
1

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

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

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

于 2015-02-08T01:24:43.013 回答