为什么django为外键生成选择框很慢?

为什么django为外键生成选择框很慢?,django,django-admin,Django,Django Admin,我有一个管理视图,其中包含四个外键,每个外键有几千个条目。它在浏览器中显示很慢 如果我改变django模型,通过添加原始的id字段来消除选择框,事情就会变得很好、很快。所以速度慢是由于select下拉列表的数量造成的,这也是一个已知的问题,因为这就是为什么存在raw_id_字段的原因 我想了解是什么导致了这种缓慢。在服务器上,如果我对用于填充选择框的数据执行SQL查询,结果是即时的。因此,Postgres检索或排序数据不是原因 可能是传输填充下拉列表的数据所需的时间?还是django正在做的事情

我有一个管理视图,其中包含四个外键,每个外键有几千个条目。它在浏览器中显示很慢

如果我改变django模型,通过添加原始的id字段来消除选择框,事情就会变得很好、很快。所以速度慢是由于select下拉列表的数量造成的,这也是一个已知的问题,因为这就是为什么存在raw_id_字段的原因

我想了解是什么导致了这种缓慢。在服务器上,如果我对用于填充选择框的数据执行SQL查询,结果是即时的。因此,Postgres检索或排序数据不是原因


可能是传输填充下拉列表的数据所需的时间?还是django正在做的事情?

传输巨大的选择列表确实需要相当长的时间。标记可以真正开始累积。尝试检查html输出的大小(KB/MB)。我记得有一次看到一个select列表(只有1000个条目)在上一个作业中对一个页面的访问量达到了5兆左右。这是一个ASP.NET项目;当你遇到这样的问题时,使用什么样的框架并不重要


我不确定django管理工具是否能做到这一点,但听起来你真的需要一个多级选择列表来深入搜索结果,而不是一次将每个选项发送给客户端。

首先要做的是在你的站点上实现gzip,这将使响应的大小至少减少一半


然后,如果速度仍然很慢,可以研究一些ajax自动建议类型小部件来处理选择正确的值。看起来有一些文档化的解决方案可以解决这个问题:

它有600KB,所以看起来这可以解释它。谢谢