我正在尝试优化来自一个相当小的 Django 应用程序的数据库调用。目前我有几个模型,Inquiry
和InquiryStatus
. 从 MySQL 中选择所有记录时,我JOIN
在两个表上得到了一个很好的语句,然后是对 InquiryStatus 表的许多请求。如果我已经完成了,为什么 Django 仍然发出单独的请求select_related()
?
模型如下所示:
class InquiryStatus(models.Model):
status = models.CharField(max_length=25)
status_short = models.CharField(max_length=5)
class Meta:
ordering = ["-default_status", "status", "status_short"]
class Inquiry(models.Model):
ts = models.DateTimeField(auto_now_add=True)
type = models.CharField(max_length=50)
status = models.ForeignKey(InquiryStatus)
class Meta:
ordering = ["-ts"]
我为调试而拼凑的视图如下所示:
def inquiries_list(request, template_name="inquiries/list_inquiries.js"):
## Notice the "print" on the following line. Forces evaluation.
print models.Inquiry.objects.select_related('status').all()
return HttpResponse("CRAPSTICKS")
我试过使用select_related(depth=1)
,没有任何变化。对数据库的每个无关请求都id
在WHERE
子句中选择一个特定的请求。
更新:
所以有一点非常重要的代码应该与模型一起放入:
from fullhistory import register_model
register_model(Inquiry)
register_model(InquiryStatus)
结果,fullhistory
是(由于我无法理解的原因)提取每个单独的结果并对其进行解析。