Django - 管理员 - 表单更改

Posted

技术标签:

【中文标题】Django - 管理员 - 表单更改【英文标题】:Django - Admin - on form change 【发布时间】:2019-04-25 11:46:47 【问题描述】:

我有一个一般性的问题要问 django-admin。

是否可以对表单更改做出反应?

我的 django-admin 详细信息站点中有一个选择字段。每当我从选择字段更改数据时,我都想更改只读字段。

有人处理过这个问题吗?

感谢和问候

【问题讨论】:

你使用的是哪个版本的 Django? 我认为你可以用 javascript 做到这一点,伙计。 【参考方案1】:

Abhijith K 在另一个 SO Q&A 中找到了一个很好的答案:

How can i add a onchange js event to Select widget in Django?

reciept=forms.ChoiceField(reciept_types, widget = forms.Select(attrs = 'onchange': "myFunction();"))

需要明确的是,这是您在小部件定义中添加的内容:attrs = 'onchange': "myFunction();" 用于定义将调用哪个 JS 函数,此时触发 onchange 事件。

然后您可以在 ModelAdmin 中定义一个您想要访问的 JavaScript 文件,您可以在其中定义您的函数“myFunction()”:

@admin.register(AnswerTree)
class AnswerTreeAdmin(ModelAdmin):
    form = AnswerTreeForm
    ...

    class Media:
        js = ("admin_js/answertree_modeladmin.js",)

关于在 ModelAdmin 上定义资产(如 JavaScript 和 CSS)的 Django 文档: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#modeladmin-asset-definitions

还有什么好用的,我发现你可以使用attrs = 'onchange': "myFunction(this.value);"访问输入的值,注意我现在在这里传递参数this.value

JavaScript 函数定义示例:

myFunction = (value) => 
    console.log(value)


OR

myFunction(value) 
    console.log(value)

【讨论】:

【参考方案2】:

我的两分钱:

正如其他人所说,这是javascript 的作品。在管理页面中,Django 输入jquery。它被称为django.jQuery。所以你会按照@Ashfaq 的建议去做。您将创建一个custom_script.js 并添加到Media 元类中。

基本上(如@Ashfaq):

class MyModelAdmin(admin.ModelAdmin):
    class Media:
        js = ("js/custom_script.js",)

custom_script.js 将是这样的(假设您的select 字段被称为id_category):

django.jQuery( document ).ready(function() 
    console.log( "ready!" );
    django.jQuery('#id_category').change(function() 
      alert( "Handler for #id_category was called." );
    );
);

ready 函数将保证处理程序正在设置。

【讨论】:

【参考方案3】:

我认为在这里可行的事情是添加 jQuery + 您的自定义 javascript 并使用事件/单击任何您想要的元素。

class MyModelAdmin(admin.ModelAdmin):
    class Media:
        js = ("js/custom_script.js",)

在 custom_script 中,您可以根据需要添加点击或更改事件。

【讨论】:

以上是关于Django - 管理员 - 表单更改的主要内容,如果未能解决你的问题,请参考以下文章

为我的应用程序之外的单个模型覆盖 django 管理员更改表单?

当浏览器中的值更改时如何刷新 django 管理表单?

从 django 管理操作中间页面重定向到更改表单页面

将模型范围的帮助文本添加到 django 模型的管理表单

在 django admin 中为内联项目添加完整更改表单的链接?

Django 中的内联表单验证