以下是django中的示例代码。Django:随机排序(order_by('?'))使附加查询
[案例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))
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是懒惰'?
在此先感谢。
哇,你提出的解决方案真的很棒。谢谢! – 2014-09-22 00:58:41