Как кешировать результаты запроса в django и использовать его? - PullRequest
0 голосов
/ 31 октября 2019

У меня небольшой запрос, данные с которого передаются на <select>. Я использую paginator, и этот селектор делает запрос на каждой странице. Поэтому я хочу кэшировать его и пытаться обновлять, например, каждые 10 минут. Как сохранить кеш и как передать его в шаблон, чтобы селектор работал?

views.py

contractors = Contractors.objects.values_list('name', flat='True')

HTML-код

<select name="contractorName" class="form-control" id="id_contractorName">
<option value="" selected=""></option>
{% for contractor in contractors %}
<option value="{{ contractor }}">{{ contractor }}</option>
{% endfor %}
 </select>

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Есть много способов сделать это, основываясь на django cache framework. Вот пример того, как вы можете создать template fragment кеш:

{% load cache %}

{% cache 600 contractors %}
    <select name="contractorName" class="form-control" id="id_contractorName">
    <option value="" selected=""></option>
    {% for contractor in contractors %}
    <option value="{{ contractor }}">{{ contractor }}</option>
    {% endfor %}
    </select>
{% endcache %}

Или вы также можете использовать low level caching API от Джанго:

from django.core.cache import cache

...

contractors = cache.get('contractors')
if not contractors:
     contractors = list(Contractors.objects.values_list('name', flat='True'))
     cache.set('contractors', contractors, 600)
0 голосов
/ 31 октября 2019

Вы можете попробовать для этого использовать django-cachalot. Он кэширует обслуживаемые данные и делает кэш недействительным, как только данные изменяются.

https://django -cachalot.readthedocs.io / en / latest / index.html

...