class UnassignedThread(models.Manager):
def get_queryset(self):
return super(UnassignedThread,
self).get_queryset().filter(
_irc_name__isnull=True)
是否会缓存results = ThreadVault.unassigned_threads.all()
?我不确定_isnull=True
是否算作评估(因为评估会导致缓存)。
另外,如果有一个名为ThreadVault的模型,我想查找数据库中是否存在#777和#888这样的线程,哪种方式最好利用缓存进行查找?
ThreadVault.objects.get(thread_id="777")
ThreadVault.objects.get(thread_id="888")
或
results = ThreadVault.objects.all()
for ticket in results:
if ticket.thread_id == "777" or ticket.thread_id == "888":
do something
答案 0 :(得分:2)
不,查询集在切片或迭代之前都是惰性的。 filter
只是为查询添加条件,但不会对其进行评估。
对于你的第二个问题,这两个问题都不是很好,虽然第一个问题比第二个问题更为可取(它涉及加载和迭代表中的每个对象)。相反,您应该将exists()
与__in
过滤器结合使用:
ThreadVault.objects.filter(thread_id__in=["777", "888"].exists()
这些问题都与缓存无关。
答案 1 :(得分:1)
th_ids = ["777","888"]
ThreadVault.objects.filter(thread_id__in=th_ids).exists()
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):