1

ドキュメントのパターンを使用して、非地理モデルで Cache Machine のキャッシュ マネージャーを使用しています。

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

これら 2 つのマネージャーを地理モデルに統合するにはどうすればよいですか? 私はDjango 1.5 / Python 2.7.5を使用しています。

これは、私が取得した CachingManager をオーバーライドすることを示していますが、Cache Machine のドキュメントでは、QuerySet が確実にキャッシュされるようにする必要がある、つまり CachingQuerySet になるようにする必要があると考えさせられます。

CachingManager をサブクラス化する代わりに、他のマネージャーの get_query_set メソッドから CachingQuerySet を返す

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 に答える