使用Django缓存机覆盖Django中的管理器
由于“覆盖对象模型”属性,因此修改queryset的正确方法如下所示:使用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__(
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正在从缓存中提交。看看它,你就会知道它是否有效。