Как аннулировать кэш представления с помощью django-cacheops

У меня есть представление, и я кэшировал его в views.py используя django-cache(https://github.com/Suor/django-cacheops)

@cached_view(timeout=60*15)
@csrf_exempt
def order(request, usr):
...

и regex для представления заказа в urls.py

url(r'^order/(?P<usr>\D+)$', views.order, name='ord')
#Example Url: http://127.0.0.1:8000/order/demo (demo is the user name)

И я хочу аннулировать кэшированный порядок представления внутри нижеприведенного представления

@login_required 
def available(request, pk, avail):
    pk = int(pk)
    avail = strtobool(avail)
    if avail:
        Product.objects.filter(id = pk).update(available = True)
    else:
        Product.objects.filter(id = pk).update(available = False)
    return HttpResponseRedirect(reverse_lazy('yc')) 

Согласно документации, мы можем достичь этого, выполнив

@login_required 
def available(request, pk, avail):
    pk = int(pk)
    avail = strtobool(avail)
    if avail:
        Product.objects.filter(id = pk).update(available = True)
        order.invalidate("http://127.0.0.1:8000/order/demo", "demo")
        #it's a dummy url I've handled it dynamically in my code
    else:
        Product.objects.filter(id = pk).update(available = False)
        order.invalidate("http://127.0.0.1:8000/order/demo", "demo")
        #it's a dummy url I've handled it dynamically in my code
    return HttpResponseRedirect(reverse_lazy('yc')) 

Но это не работает. Вот мои логи при использовании redis-cli

Похоже, что он удаляет какой-то другой кэш.

Я также поднял этот вопрос в репозитории django-cache, вы можете проверить его здесь (https://github.com/Suor/django-cacheops/issues/425). для получения дополнительной информации.

Поскольку вы использовали именованную группу usr в вашем regex, Django передает ее как аргумент ключевого слова:

url(r'^order/(?P<usr>\D+)$', views.order, name='ord')

Но вы пытаетесь аннулировать кэш с помощью позиционного аргумента:

order.invalidate("http://127.0.0.1:8000/order/demo", "demo")

Вместо этого, сделайте его недействительным с помощью соответствующего аргумента ключевого слова:

order.invalidate("http://127.0.0.1:8000/order/demo", usr="demo")
Вернуться на верх