我正在Django中编程一个网站生成器,每个页面都有很多字段需要填写。
其中一些非常神秘,为了避免弄乱最初隐藏的页面:
class ScriptInlinePage(admin.TabularInline):
model = Page.script.through
extra = 0
fields = ('active', 'script', 'order', )
verbose_name = "script set"
verbose_name_plural = "script sets"
classes = ['collapse']
为了简化页面,我已经使折叠的内联不引人注目:
脚本集(显示▶)
然而,如果这些最初隐藏的字段包含一个值而用户不知道,则可能会产生灾难性的影响。
我正在寻找一种方法:
- 添加一个类已折叠,但如果不是空的,则最初可见,或者
- 修改collapse类,使其仅在为空时初始折叠
我试着添加到模型中
def is_empty:
if self.count > 0: return True
else: return False
但我不知道如何在Admin类中使用这些信息来获得我想要的效果。
类似的问题:我以为我看到了一种方法,可以使内联可折叠,而不会使其最初折叠,但经过多次谷歌搜索,我找不到它。这不是一件事吗?
感谢AD让我找到了正确的位置,我最终复制了折叠折叠元素的管理javascript。
[app文件夹]/static/admin/js/ifempty.js
'use strict';
{
window.addEventListener('load', function() {
const fieldsets = document.querySelectorAll('fieldset.ifempty');
for (const [i, elem] of fieldsets.entries()) {
if (elem.querySelectorAll('div.related-widget-wrapper').length > 1) {
elem.classList.remove('collapse');
}
}
});
}
然后,在admin.py中:
class PageAdmin(admin.ModelAdmin):
class Media:
js = ( 'admin/js/ifempty.js', )
...
结果是,在内联中,我可以将ifempty添加到类列表中:
class ScriptInlinePage(admin.TabularInline):
model = Page.script.through
extra = 0
fields = ('active', 'script', 'order', )
verbose_name = "script set"
verbose_name_plural = "script sets"
classes = ['collapse', 'ifempty',]
当页面被加载时;隐藏的";具有值的字段不再隐藏。
起初我想让这些字段可折叠,但我意识到用户永远不会麻烦。
因此,当字段包含数据时取消collapse类是一个完美的解决方案。