Ошибка в Django CacheMachine игнорирует сохранение модели?

У меня очень простой класс 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()
[]

К вашему сведению, я провел тесты для Django Cache Machine, показанные здесь. Они все прошли.

2 ответа

Решение

Я только что проверил свою вилку на машине с Windows, которую я сам сейчас проверял:

Проверка изображения: http://oi61.tinypic.com/2w5jf9d.jpg

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

Вы уверены, что запускаете этот тест на моей ветке? Это была проблема, которая у меня была (похожая) и была с ней решена.

Каждое сохранение должно аннулировать все наборы запросов, связанные с моделью. Так что в этом случае после x.save() объект MyClass не должен иметь никакой информации в вашем кэше.

Я протестировал и отлично работает в моем случае, используя Redis в качестве nocache db.

Другие вопросы по тегам