我使用pattern in the docs在我的非地理模型上使用Cache Machine的缓存管理器:
from django.db import models
from caching.base imoprt CachingManager, CachingMixin
class Zomg(CachingMixin, models.Model):
val = models.IntegerField()
objects = CachingManager()
但我有几个包含GeoDjango字段类型的模型,因此must use GeoManager,例如。
class RecordArea(models.Model):
polygon = models.MultiPolygonField(srid=4326)
name = models.CharField(max_length=100)
...
objects = models.GeoManager()
如何在地理模型上整合这两位经理?我在使用Django 1.5 / Python 2.7.5。
This指向覆盖CachingManager,我得到了,但Cache Machine文档让我觉得我需要确保QuerySet被缓存,即成为CachingQuerySet:
从其他管理器的get_query_set方法返回一个CachingQuerySet 而不是继承CachingManager
答案 0 :(得分:2)
创建自己的自定义管理器,继承自GeoManager并返回CachingQuerySet:
在myapp / manager.py中:
from django.contrib.gis.db.models import GeoManager
from caching.base import CachingQuerySet
class MyModelManager(GeoManager):
"""
A custom manager for myapp models.
"""
def get_queryset(self):
return CachingQuerySet(self.model, using=self._db)
在myapp / models.py中:
from django.contrib.gis.db import models
from caching.base import CachingMixin
from .manager import MyModelManager
class MyModel(CachingMixin, models.Model):
something = models.CharField()
objects = MyModelManager()
你得到了一个可缓存的模型。