Очистить каждый кеш представления - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть несколько представлений, каждое из которых имеет таблицу кеша.

И удаление кеша при обратном вызове pre_save.

Пока я удаляю каждый кеш каждый раз.

Есть ли способ удалить каждую таблицу одну за другой ???

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    @method_decorator(cache_page(None))
    @method_decorator(vary_on_cookie)
    def list(self,request,*args,**kwargs):

class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all()
    @method_decorator(cache_page(None))
    @method_decorator(vary_on_cookie)
    def list(self,request,*args,**kwargs):

@receiver(pre_save, sender=Article)
def cache_delete_callback(sender, **kwargs):
    print("cache delete")
    from django.core.cache import cache;cache.clear()// want to delete only Article cache

@receiver(pre_save, sender=Item)
def cache_delete_tweet_callback(sender, **kwargs):
    print("clear tweet cache")
    from django.core.cache import cache;cache.clear() // wan to delete only Item Cache

1 Ответ

1 голос
/ 16 апреля 2020

Ваш кэш установлен на страницах (просмотрах), а не на одном объекте, как в документации

Кэш для каждого просмотра, как и кэш для сайта, имеет ключ от URL. Если несколько URL указывают на одно и то же представление, каждый URL будет кэшироваться отдельно. Продолжая пример my_view, если ваш URLconf выглядит следующим образом:

urlpatterns = [path ('foo //', my_view),]], тогда запросы к / foo / 1 / и / foo / 23 / будут кэшироваться отдельно, как вы можете ожидать. Но как только определенный URL (например, / foo / 23 /) был запрошен, последующие запросы к этому URL будут использовать кеш.

Видно, что ключи кеша на самом деле являются путями URL, поэтому Вы можете удалить каждый из них, используя cache.delete (ключ), где ключ - это URL. Так что-то в строке следующего

cache.delete(
    reverse(view_name, args=[item_id]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...