Django: Как мне использовать Cache Machine для кэширования модели, которая использует GeoManager?
Я использую Cache Machine Cache Manager на своих негеографических моделях, используя образец в документах:
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:
вернуть CachingQuerySet из метода get_query_set другого менеджера вместо создания подкласса CachingManager
1 ответ
Создайте свой собственный менеджер, который наследуется от 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()
И у тебя есть кешируемая модель.