Django-管理员-更改表单

时间:2018-11-22 19:14:17

标签: python django forms django-admin field

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

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

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

有人处理过这个问题吗?

感谢和问候

3 个答案:

答案 0 :(得分:2)

我认为在这里起作用的是添加jQuery +您的自定义javascript并玩事件/单击想要的元素。

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

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

答案 1 :(得分: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函数将确保已设置处理程序。

答案 2 :(得分:0)

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

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();"}定义了将触发onchange事件的情况下将调用哪个JS函数。

然后,您可以在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)
}
相关问题