Django 管理页面中的重置字段
Reset field in Django Admin page
想象一下,我有模型并且可以在 Django 管理表单中更新我的字段。我想实现类似的东西:更新一个字段,第二个字段将在管理表单中实时重置(我希望它能在未来帮助真正的管理员不要忘记重新定义第二个字段,因为它在我的工作中非常重要情况)。是否可以在没有自定义管理表单的情况下实现类似的功能?
要在没有自定义模板或表单的情况下实现这一点,您可以只包含一个自定义脚本,例如:
假设您有一个名为 people
的应用,它有一个名为 Person
的模型,其中包含两个字段 first_name
和 last_name
:
将 javascript 包含到管理页面
# people/admin.py
from django.contrib import admin
from people.models import Person
class PersonAdmin(admin.ModelAdmin):
class Media:
js = ('people/js/person.js',)
admin.site.register(Person, PersonAdmin)
然后创建 person/js/person.js
脚本:
'use strict';
//execute when everything is loaded
window.addEventListener('load', () => {
let first_field = document.querySelector('form input[name=first_name]'); //field name
let second_field = document.querySelector('form input[name=last_name]'); //field name
//just when the fields are found (add or update)
if(first_field && second_field) {
//here you can implement whatever logic you want
first_field.addEventListener('input', () => {
second_field.value = '';
});
}
});
现在每次 first_name
更改 last_name
都会被清除。这个想法可以扩展到做更多有趣的事情。
想象一下,我有模型并且可以在 Django 管理表单中更新我的字段。我想实现类似的东西:更新一个字段,第二个字段将在管理表单中实时重置(我希望它能在未来帮助真正的管理员不要忘记重新定义第二个字段,因为它在我的工作中非常重要情况)。是否可以在没有自定义管理表单的情况下实现类似的功能?
要在没有自定义模板或表单的情况下实现这一点,您可以只包含一个自定义脚本,例如:
假设您有一个名为 people
的应用,它有一个名为 Person
的模型,其中包含两个字段 first_name
和 last_name
:
将 javascript 包含到管理页面
# people/admin.py
from django.contrib import admin
from people.models import Person
class PersonAdmin(admin.ModelAdmin):
class Media:
js = ('people/js/person.js',)
admin.site.register(Person, PersonAdmin)
然后创建 person/js/person.js
脚本:
'use strict';
//execute when everything is loaded
window.addEventListener('load', () => {
let first_field = document.querySelector('form input[name=first_name]'); //field name
let second_field = document.querySelector('form input[name=last_name]'); //field name
//just when the fields are found (add or update)
if(first_field && second_field) {
//here you can implement whatever logic you want
first_field.addEventListener('input', () => {
second_field.value = '';
});
}
});
现在每次 first_name
更改 last_name
都会被清除。这个想法可以扩展到做更多有趣的事情。