我对django-admin有一个一般性问题。
是否可以对表单更改做出反应?
我的django-admin详细信息站点中有一个选择字段。每当我更改选择字段中的数据时,我都想更改只读字段。
有人处理过这个问题吗?
感谢和问候
答案 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)
}