Django CacheMachine 中的错误会忽略模型的保存吗?
Bug in Django CacheMachine ignores saving of Model?
我有一个非常简单的 Django class:
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 类型的操作时,这个 class 工作正常:
>>> 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>]
>>>
现在我 add/modify 3 行 class 定义启用 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
之后,我 t运行cate 数据库,刷新 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 缓存机器的测试 here。都通过了。
你确定你是运行这个针对我分支的测试吗?这是我遇到的(类似的)问题并已解决。
每次保存都应该使与模型相关的所有查询集失效。所以在这种情况下,在 x.save() 之后对象 MyClass 不应该在你的缓存中有任何信息。
我已经测试过并且在我的案例中工作正常,使用 Redis 作为 nocache 数据库。
我刚刚在 windows 机器上测试了我的叉子,现在我自己检查一下:
图片检查:http://oi61.tinypic.com/2w5jf9d.jpg
Github URL: https://github.com/asketsus/django-cache-machine
我有一个非常简单的 Django class:
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 类型的操作时,这个 class 工作正常:
>>> 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>]
>>>
现在我 add/modify 3 行 class 定义启用 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
之后,我 t运行cate 数据库,刷新 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 缓存机器的测试 here。都通过了。
你确定你是运行这个针对我分支的测试吗?这是我遇到的(类似的)问题并已解决。
每次保存都应该使与模型相关的所有查询集失效。所以在这种情况下,在 x.save() 之后对象 MyClass 不应该在你的缓存中有任何信息。
我已经测试过并且在我的案例中工作正常,使用 Redis 作为 nocache 数据库。
我刚刚在 windows 机器上测试了我的叉子,现在我自己检查一下:
图片检查:http://oi61.tinypic.com/2w5jf9d.jpg
Github URL: https://github.com/asketsus/django-cache-machine