Database Django-这些查询集会被缓存吗?
Database Django-这些查询集会被缓存吗?,database,django,caching,django-models,Database,Django,Caching,Django Models,results=ThreadVault.unassigned\u threads.all()会被缓存吗?我不确定\u isnull=True是否算作已计算的值(因为计算会导致缓存) 另外,如果有一个名为ThreadVault的模型,我想查找数据库中是否存在线程#777和#888,使用缓存进行查找的最佳方式是什么 class UnassignedThread(models.Manager): def get_queryset(self): return super(Unas
results=ThreadVault.unassigned\u threads.all()
会被缓存吗?我不确定\u isnull=True
是否算作已计算的值(因为计算会导致缓存)
另外,如果有一个名为ThreadVault的模型,我想查找数据库中是否存在线程#777和#888,使用缓存进行查找的最佳方式是什么
class UnassignedThread(models.Manager):
def get_queryset(self):
return super(UnassignedThread,
self).get_queryset().filter(
_irc_name__isnull=True)
或
不,查询集在切片或迭代之前是惰性的
filter
只是向查询添加条件,但不计算它
对于第二个问题,这两个问题都不是很好,尽管第一个问题比第二个问题要好得多(这涉及加载和迭代表中的每个对象)。相反,您应该将exists()
与过滤器中的\u结合使用:
results = ThreadVault.objects.all()
for ticket in results:
if ticket.thread_id == "777" or ticket.thread_id == "888":
do something
这两个问题都与缓存无关。th_id=[“777”、“888”]
ThreadVault.objects.filter(thread\u id\u in=th\u id).exists()
用于缓存视图
来自django.views.decorators.cache导入缓存页面
@cache\u页面(60*15)
def我的视图(请求):
因为我需要知道,如果每个线程id都存在以添加它,那么上面的操作将不起作用。执行列表(ThreadVault.objects.all())是否会更有效,这样_result_缓存已满,可以测试每个票证号是否存在?
results = ThreadVault.objects.all()
for ticket in results:
if ticket.thread_id == "777" or ticket.thread_id == "888":
do something
ThreadVault.objects.filter(thread_id__in=["777", "888"].exists()