1

我使用文档中的模式在我的非地理模型上使用缓存机器的缓存管理器:

from django.db import models

from caching.base imoprt CachingManager, CachingMixin

class Zomg(CachingMixin, models.Model):
    val = models.IntegerField()

    objects = CachingManager()

但是我有几个包含 GeoDjango 字段类型的模型,因此必须使用 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 上。

指向覆盖我得到的 CachingManager,但是 Cache Machine 文档让我认为我需要确保 QuerySet 被缓存,即成为 CachingQuerySet:

从另一个管理器的 get_query_set 方法返回一个 CachingQuerySet 而不是继承 CachingManager

4

1 回答 1

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

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

于 2014-08-11T19:38:24.407 回答