这里是Django的示例代码。
[案例1]
views.py
from sampleapp.models import SampleModel
from django.core.cache import cache
def get_filtered_data():
result = cache.get("result")
# make cache if result not exists
if not result:
result = SampleModel.objects.filter(field_A="foo")
cache.set("result", result)
return render_to_response('template.html', locals(), context_instance=RequestContext(request))
模板.html
{% for case in result %}
<p>{{ case.field_A}}</p>
{% endfor %}
在这种情况下,在缓存之后没有生成的查询。我通过Django Debug Toolbar进行了检查。
[案例2]
views.py - 添加了一行result = result.order_by('?')
from sampleapp.models import SampleModel
from django.core.cache import cache
def get_filtered_data():
result = cache.get("result")
# make cache if result not exists
if not result:
result = SampleModel.objects.filter(field_A="foo")
cache.set("result", result)
result = result.order_by('?')
return render_to_response('template.html', locals(), context_instance=RequestContext(request))
template.html - 与之前的相同
在这种情况下,即使我缓存了过滤查询,它也会生成新的查询。
如何在不使用额外查询集的情况下适应随机排序?
当进行缓存时,我不能添加
order_by('?')
。 (例如:result = SampleModel.objects.filter(field_A="foo").order_by('?')
) 因为它会连随机排序一起缓存。这是否与“Django查询集是延迟查询”有关?
提前感谢您的回答。