Django Admin 根据其他选择动态禁用字段

Posted

技术标签:

【中文标题】Django Admin 根据其他选择动态禁用字段【英文标题】:Django Admin disable field dynamically based on other selections 【发布时间】:2012-03-08 23:26:53 【问题描述】:

我已经构建了一个 django 模型,其中必填字段会根据用户对其他先前字段的选择而改变。具体来说,它是一个事件调度应用程序,其中选项会根据用户做出的选择而变化。

某些字段组合根本无效,我将模型设置为检查这些组合并且不允许它们。但是,在 UI 中找出正确的组合有点令人困惑。我希望管理 UI 通过在用户更改其他字段时隐藏或禁用无效字段来帮助解决此问题。

例如,如果用户选择让事件每周重复一次,我需要禁用(或最好删除)所有每日和每月字段,只显示每周字段,例如星期几。

此外,如果他们返回并将其更改为每天,则显示或启用的字段需要更改以反映该选择。

我将如何设置管理表单以便发生这种情况?我知道这可以通过 DOM 和 javascript 实现,但我正在尝试确定 Django 中是否有这种机制。我一直在搜索 Django 文档,但似乎找不到。

有没有人举例说明你是如何做类似事情的?

【问题讨论】:

在 Django 中没有“机制”。 JavaScript 是您唯一的选择。使用 JavaScript 有什么问题? 【参考方案1】:

没有内置解决方案。

简单的解决方案是将自定义 JavaScript 代码添加到您的管理员。请参阅reference here。只需将 js 和 css 文件添加到 Admin 类并在您的自定义 js 中编写表单。

class ReportAdmin(admin.ModelAdmin):

    class Media:
        js = (
            'frontend/js/jquery-1.6.1.min.js',
            'frontend/js/jquery-ui.min.js',
            'frontend/js/custom_js.js',
        )

【讨论】:

还需要更新模型的clean方法,否则用户修改或关闭javascript可能会提交无效数据。

以上是关于Django Admin 根据其他选择动态禁用字段的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 django admin 中的另一个选择字段限制选择字段选项

Django Admin中的动态字段

Django admin 根据另一个字段值过滤一个外部字段

根据值在 Admin 中自定义 Django 表单字段

Oracle Apex 根据 LOV 选择的值动态启用/禁用文本字段

如何使用 ajax 在 Django-admin 表格内联中读取/写入输入字段?