为什么Django的管理详细信息页面会产生如此多的查询?

时间:2012-10-22 22:39:01

标签: django django-admin

我正在开发一个相当标准的Django应用程序,最近我一直在调整管理员。虽然列表视图以合理的速率加载,但详细信息和添加视图需要大约10秒才能加载。

我不确定为什么会这样 - 我怀疑它与数据库被过度查询有关,事实上它确实如此。打开日志记录后,我发现控制器正在查询表中的每个id:

...
[Mon Oct 22 18:32:52 2012] [error] (0.001) SELECT `courses_course`.`id`, `courses_course`.`semester`,
 `courses_course`.`name`, `courses_course`.`credits`, `courses_course`.`description`, `courses_course
`.`history_id`, `courses_course`.`oldpcr_id`, `courses_course`.`primary_alias_id` FROM `courses_cours
e` WHERE `courses_course`.`id` = 2077 ; args=(2077,)
[Mon Oct 22 18:32:52 2012] [error] (0.000) SELECT `courses_course`.`id`, `courses_course`.`semester`,
 `courses_course`.`name`, `courses_course`.`credits`, `courses_course`.`description`, `courses_course
`.`history_id`, `courses_course`.`oldpcr_id`, `courses_course`.`primary_alias_id` FROM `courses_cours
e` WHERE `courses_course`.`id` = 2078 ; args=(2078,)
[Mon Oct 22 18:32:52 2012] [error] (0.001) SELECT `courses_course`.`id`, `courses_course`.`semester`,
 `courses_course`.`name`, `courses_course`.`credits`, `courses_course`.`description`, `courses_course
`.`history_id`, `courses_course`.`oldpcr_id`, `courses_course`.`primary_alias_id` FROM `courses_cours
e` WHERE `courses_course`.`id` = 2079 ; args=(2079,)
...

有人可以解释为什么会这样吗?我无法想到任何可以解释它的东西。

1 个答案:

答案 0 :(得分:0)

我在这里找到答案:Improving Performance of Django ForeignKey Fields in Admin

因为Django将外键列为select列表,所以它必须查询每一个。看起来几种解决方案是可行的,但最简单的方法是将字段设置为raw_id field。 (事实上​​,这样做解决了我的问题。)