javascript - 有没有办法在 Django Admin 弹出窗口(添加、更新、删除)完成时调用 Javascript 函数?

标签 javascript django django-admin

Image

我有这种情况,我在 Person 字段上绑定(bind)了更改事件。

我们依赖于每次选择值更改时运行的一些 JavaScript。它当前正在监听所述元素的更改事件,当用户直接在 select 提出的菜单中单击值时,它工作正常。

遗憾的是,当通过 Admin Popup 功能填充此选择时,似乎没有为选择触发更改事件,因为我们的回调未执行,即使元素的值实际上已更改。

是否有其他事件我们可以监听以获得与用户直接从列表中单击值时相同的行为?

最佳答案

正如您在 django source code 中看到的那样, change 更新相关对象时不会触发事件。当它在 deleting 上被解雇时和 adding .

我起初以为这是一个错误,但实际上它是有道理的,因为该值不一定/实际上已更新。

但是,如果您需要在您的用例中触发此类事件,这确实是一个问题。我能建议的最好的办法是在你自己的 JS 中覆盖这个行为(当然确保在加载 Django 的 JS 之后调用它):

window.djangoDismissChangeRelatedObjectPopup = window.dismissChangeRelatedObjectPopup;

window.dismissChangeRelatedObjectPopup = function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
    const id = win.name.replace(/^edit_/, '');
    const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
    const selects = $(selectsSelector);
    window.djangoDismissChangeRelatedObjectPopup(win, objId, newRepr, newId);
    selects.trigger('change');
}

因此,每当更新相关对象时,都应触发 change 事件。

关于javascript - 有没有办法在 Django Admin 弹出窗口(添加、更新、删除)完成时调用 Javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64847806/

相关文章:

javascript - 解析未转义 XML 中的 unicode

javascript - 悬停覆盖且不影响文本颜色

python - 添加/更改表单中的 ForeignKey 字段 - Django admin

python - django admin 中的外键字段

python - 如何在代理后禁用 Django 的 CSRF 保护

python - 如何在 Django 管理仪表板中构建链式过滤器

javascript - 仅当值可用时才执行函数

javascript - angular 的 getLocaleDateTimeFormat 函数返回 {1}, {0}

python - 在 IIS 上设置 Django

python - Django: order_by ('?' ) 有奇怪的结果