python - 如何处理 Django Admin 的大量删除?
问题描述
我正在使用 Django 2.2.10。
我有一个模型叫做Site
,还有一个模型叫做Record
。每条记录都与一个站点(外键)相关联。
在我的应用程序运行几天/几周/几个月后,每个站点都可以有数千条与之关联的记录。我有效地使用数据库,所以这通常不是问题。
然而,在 Django Admin 中,当我尝试删除一个站点时,Django Admin 会尝试找出每个也将被删除的关联对象,并且因为我的 ForeignKey 使用on_delete=models.CASCADE
了我想要的,它会尝试生成一个列出数千个的页面,可能有数百万条记录将被删除。有时这会成功,但需要几秒钟。有时浏览器只是放弃等待。
我怎样才能让 Django Admin 不列出record
它打算删除的每一个?也许只是说“将删除 x 条记录”之类的话。
更新:我应该覆盖 Django 管理员的 delete_confirmation.html 吗?看起来罪魁祸首可能是这一行:
<ul>{{ deleted_objects|unordered_list }}</ul>
或者是否有一个选项可以启用自动不列出要删除的每个对象,也许如果对象计数超过 X 个对象?
更新 2:从 delete_confirmation.html 中删除上述行没有帮助。我认为生成deleted_objects 变量的视图花费了太长时间。不太确定如何覆盖 Django Admin 视图
解决方案
将此添加到您的管理类中,然后您可以使用此操作删除而不会发出警告
actions = ["silent_delete"]
def silent_delete(self, request, queryset):
queryset.delete()
如果您想隐藏默认删除操作,请将其添加到您的管理类
def get_actions(self, request):
actions = super().get_actions(request)
if 'delete_selected' in actions:
del actions['delete_selected']
return actions
推荐阅读
- html - 如何将表 tr 和 td 与角度 11 中的对象数组绑定
- node.js - 当数据在对象数组中时,使用 mongoose.populate 和 mongoose-pagivate-v2
- php - 使用 curl 检索 api 数据
- angular - NativeScript:Scrollableheight 始终为 0
- javascript - 在输入字段中输入时,以太坊到美元/其他货币
- java - 更改活动标签颜色 - Android Studio
- install4j - 最新版本的 install4j 9.0.1 不会禁用按钮
- php - 遇到非数字值 PHP MySQL PHPExcel
- reactjs - 如何避免 React 中的“ERR_CERT_AUTHORITY_INVALID”错误?
- powershell - Ifelse 语句不起作用。始终默认为相同的条件