有没有一种方法可以让一个折叠的内联在Django管理中最初可见,如果它有值的话



我正在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']

为了简化页面,我已经使折叠的内联不引人注目:

脚本集(显示▶)

然而,如果这些最初隐藏的字段包含一个值而用户不知道,则可能会产生灾难性的影响。

我正在寻找一种方法:

  1. 添加一个类已折叠,但如果不是空的,则最初可见,或者
  2. 修改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类是一个完美的解决方案。

最新更新