Django:如何使用缓存机器缓存使用GeoManager的模型?

时间:2014-04-18 00:31:53

标签: django geodjango django-cache-machine

我使用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

1 个答案:

答案 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()

你得到了一个可缓存的模型。