我正在评估一个 QuerySet,然后是另一个,但第二个是第一个的子集。我试图以一种有效的方式做到这一点,尽可能少地调用数据库。(以前有人问过这个问题,但老实说,我并没有完全理解答案,我不确定它们是否完全适用于我的想法。)
使用 Django 文档的示例 Weblog 模型,在视图中,这是尝试优化之前的代码:
myblog = Blog.objects.get(pk=1)
d={} #going to pass this to my template
# not using count()
d['num_of_entries'] = len(myblog.entry_set.all())
# not using exists()
d['is_jolly'] = bool(Entry.objects.filter(blog=myblog, headline__startswith='Jolly'))
# ... other code but no further use of database in this view
第二个 QuerySet 是第一个的子集。我是否应该尝试使用纯 Python 来获取子集(因此只评估一个 QuerySet - 少一个数据库调用)?
或者,也许只需执行以下操作?
# other code as above
d['num_of_entries'] = myblog.entry_set.count()
d['is_jolly'] = Entry.objects.filter(blog=myblog, headline__startswith='Jolly').exists()
# ... other code but no further use of database in this view