gpt4 book ai didi

python - 加速 Django 管理删除页面

转载 作者:太空狗 更新时间:2023-10-29 22:23:47 27 4
gpt4 key购买 nike

您将如何加快 Django Admin 记录删除操作/页面的速度?

我有一个模型 B,它对模型 A 有外键约束。对于 A 中的每条记录,B 中大约有 10k 条记录绑定(bind)到 A。因此,当我必须使用默认的“删除选定项”删除 A 中的记录时A”在管理中的操作,Django 将花费 15 分钟来查询和显示 B 中被删除的每条记录。我该如何修改它,而不是列出数千个依赖对象,它只显示被删除的依赖对象的计数?

最佳答案

像往常一样浏览 django 源代码以找到您的答案(它的可读性令人惊讶,变量、函数、类和文件的命名符合逻辑)。

查看 django/contrib/admin/templates/admin/delete_confirmation.html(在 django 1.2.5 中),您将看到第 24 行包含的模板:

<ul>{{ deleted_objects|unordered_list }}</ul>

如果你把它改成 say

<p>{{ deleted_objects|count }} objects</p>

{% if 100 < deleted_objects|count %}
<p>{{ deleted_objects|count }} objects</p>
{% else %}
<ul>{{ deleted_objects|unordered_list }}</ul>
{% endif %}

它只会显示已删除对象的数量(如果删除的对象很多)。

您可能还想尝试编辑 django/contrib/admin/templates/admin/actions.py 以使用 SQL 事务更快地进行批量删除。请参阅:http://docs.djangoproject.com/en/dev/topics/db/transactions/

基本上 action.py 目前通过形成适当的查询集来工作,直接调用查询集的 delete(),但不将其分组到单个数据库事务中。在示例 sqlite 数据库上进行简单的时间测试,我发现使用 qs.delete() 删除约 150 个没有事务的对象需要 11.3 秒,使用 for obj in qs: obj.delete( )。使用事务(删除函数之前的@transaction.commit_on_success),同样的命令只用了 0.35 秒和 0.39 秒(大约快了 30 倍)。授予使用事务可能会暂时锁定数据库,这可能不是可接受的选项。

明智地扩展 django 管理(通常你不想直接编辑源代码;特别是如果其他用户正在使用相同的文件,或者如果你可能想稍后恢复或在同一个上运行其他 django 站点机)见: http://www.djangobook.com/en/1.0/chapter17/#cn35

关于python - 加速 Django 管理删除页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5917409/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com