使用Django缓存机覆盖Django中的管理器

使用Django缓存机覆盖Django中的管理器,django,django-cache-machine,Django,Django Cache Machine,由于“覆盖对象模型”属性,因此修改queryset的正确方法如下所示: class ModelAQuerySet(models.query.QuerySet): def foo(self): return self.filter(name='foo') class ModelAManager(base.CachingManager): def __init__(self): super(ModelAManager, self).__init__(

由于“覆盖对象模型”属性,因此修改queryset的正确方法如下所示:

class ModelAQuerySet(models.query.QuerySet):
    def foo(self):
        return self.filter(name='foo')

class ModelAManager(base.CachingManager):
    def __init__(self):
        super(ModelAManager, self).__init__()

    def get_query_set(self):
        return ModelAQuerySet(self.model, using=self._db)

    def foo(self):
        return self.get_query_set().foo()

class ModelA(base.CachingMixin, models.Model):
    #fields ...
    objects = ModelAManager()
我们可以在某些模型中执行
objects=base.CachingManager
。这意味着,
CachingManager
已经继承了
models.Manager
本身。因此,我们只需创建一个从base.CachingManager继承的模型。对吧?


这是正确的方法吗?

你找到答案了吗?没有。不太确定,但我想我测试过一次,它成功了。这不是为你做的吗?我只是让我的自定义管理器从base.CachingManager继承,但没有处理覆盖get\u query\u set的问题。我不是100%确定它是否真的在工作,但它似乎在工作。在django缓存机器中有一个方法,它会告诉我们是否有一个queryset正在从缓存中提交。看看它,你就会知道它是否有效。