我开始审查执行的 SQL 查询,以便在我的 Django 项目中改进它们(缓存、重新格式化它们等)。
例如,要从数据库中获取单个对象,请执行以下操作:
Company.objects.filter(pk=1)[:1]
比:
Company.objects.filter(pk=1)
因为在前者中,我们限制了查找的数量。这很明显,但不太明显的是在访问恰好是 ForeignKey 的模型的属性时如何设置限制。例如,如果CompanyModel
是一个有OneToOneField
to Company 的模型,我们尝试从主模型访问一些属性:
test = Company.objects.filter(pk=1)[:1]
profile = test.CompanyProfile.owner
为获取有关 CompanyProfile 的信息而执行的查询将没有任何限制,因此将遍历整个表以查找尽可能多的记录。如何设置限制以使其不这样做?