【发布时间】:2014-11-15 15:39:37
【问题描述】:
这是 django 中的示例代码。
[案例一]
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))
template.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 queryset is lazy'有关?
提前致谢。
【问题讨论】: