0

我正在开发一个相当标准的 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,)
...

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

4

1 回答 1

0

我在这里找到了答案:在 Admin 中提高 Django ForeignKey Fields 的性能

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

于 2012-10-22T23:44:31.147 回答