11

我在 Django Admin 中的一些视图加载时间过长。调试 Django Admin 视图以查看正在咀嚼循环的最佳方法是什么?

4

4 回答 4

9

正如rantanplan 评论的那样,django 调试工具栏是开始分析的最简单方法(显示在页面加载时执行的所有查询、它们的解释、它们的执行时间等)。您还可以在此处查看有关分析慢速 django 安装的问题: 如何根据执行时间分析 django 应用程序?

该问题提到了 hotshot 的使用,Django 的 Wiki 在profiling django下也引用了它。

于 2012-10-28T00:47:20.770 回答
5

如果他们的表非常非常大(几百万条记录就可以了)并且表引擎是 MySQL 的 InnoDB,我也在 Django Admin 中看到了特定模型。我花了一段时间才想出解决方法,让我的 Django 管理员再次为拥有 100M+ 记录的表而嗡嗡作响。根本问题最终是COUNT(*)页面加载时的昂贵查询以及每当我使用search_fieldsModelAdmin 中的一个查询查询时构造不佳的搜索查询。

我在这里记录了我的所有解决方案,以便他们有一天可以帮助陷入困境的 Django 同胞:http: //crailabenz.me/2013/06/12/how-i-made-django-admin-scale/

于 2013-06-14T21:41:02.550 回答
0

如果您将 Django 与 MySQL 一起使用,那么 MySQL 中存在一个带有 INNER JOINs 优化的错误。如果您尝试在Admin.list_displayDjango 中使用外键,则会生成带有排序和 INNER JOIN 的查询,这在 MySQL 中非常慢。

有两种解决方案:

  1. 使用 django-mysql-fix 后端:https ://pypi.python.org/pypi/django-mysql-fix

  2. get_query_set在 AdminChangeList 中覆盖 - 删除和select_related设置prefetch_related字段 - 更多详细信息在我的其他答案中:https ://stackoverflow.com/a/23097385/1178806

于 2014-04-16T23:32:15.847 回答
0

这是一些关于由具有许多记录的 ForeignKey 表引起的缓慢编辑表单的一些很好的答案 Django 管理员更改表单加载速度很慢

关于列表视图:1)您可以添加 list_per_page 选项并显示更少的结果:

class EventAdmin(admin.ModelAdmin):
    list_per_page = 20

2)或使用select_related():

2.1) 对于 django < 1.6:

class EventAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(EventAdmin, self).queryset(request)
        return qs.select_related('foreign_key_field1, foreign_key_field2, etc')

2.2) 对于 django >= 1.6:

class EventAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super(EventAdmin, self).queryset(request)
        return qs.select_related('foreign_key_field1, foreign_key_field2, etc')

当然,将 foreign_key_field1 和 foreign_key_field2 等替换为适当的字段名称。

于 2015-09-01T16:25:12.417 回答