【问题标题】:Django Admin intercept onchange event of a field and make an actionDjango Admin 拦截字段的 onchange 事件并执行操作
【发布时间】:2020-01-23 17:33:39
【问题描述】:

在我的 django 项目中,每当另一个选择字段发生 onChange 事件时,我都会清除一个字段值。 我有一个像这样的添加表单:

每次模板字段更改(onChange),测试用例字段必须变为空白。

如何在 django 管理员添加或编辑页面中执行此操作?

提前非常感谢

【问题讨论】:

  • 如果您希望它立即反映而不重新加载页面,那么您应该使用 JavaScript 监听 onChange 事件并重置其他字段的值。如果你同意的话,我可以用js给你答案
  • 好的,非常感谢

标签: django python-3.x django-admin


【解决方案1】:

也可以在modelform meta widgets dict中设置事件;

class ReceiptsForm(ModelForm):
    class Meta:
        model = Receipts
        fields = []
        widgets = {
            'partner_id': forms.Select(attrs={'onchange': 'this.form.submit();'})
        }

【讨论】:

    【解决方案2】:

    您可以customize Admin asset definition 并使用 JavaScript/jQuery 来处理您的问题。这是一个例子:

    admin.py

    class TestCaseAdmin(admin.ModelAdmin):
        class Media:
            js = (
                'js/admin.js',   # inside app static folder
            )
    
    admin.site.register(TestCase, TestCaseAdmin)
    

    js/admin.js

    if (!$) {
        // Need this line because Django also provided jQuery and namespaced as django.jQuery
        $ = django.jQuery;
    }
    
    $(document).ready(function() {
        $("select[name='template']").change(function() {
            $("select['test_case']").val('');
        });
    });
    
    • templatetest_case 是模型上的字段名称

    【讨论】:

    • @abnerh69,我不明白你的想法。为什么它应该是“类媒体”?我之所以使用class Meta,是因为这是 Django 中的一个功能,它允许我们为其他类设置元数据
    • 这是因为 Django(版本 1.8 到 3.0)文档位于 docs.djangoproject.com/en/3.0/ref/contrib/admin/…。但是你的回答对我帮助很大。只需更改 Meta for Media。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多