如何在 Django Admin 中只折叠一个字段?

Apr*_*che 5 python django django-admin

django admin 允许您指定 fieldsets。您可以正确构建一个将不同字段组合在一起的元组。您还可以为某些字段组指定类。其中一个类是collapse,它将字段隐藏在可折叠区域下。这有利于隐藏很少使用或高级的字段以保持 UI 干净。

但是,我有一种情况,我只想在许多不同的应用程序中隐藏一个单独的字段。为了在每个 admin.py 文件中创建完整的字段集规范,只需将一个字段放入折叠区域,这将需要大量输入。它还造成了维护困难的情况,因为我每次编辑关联模型时都必须编辑字段集。

我可以使用exclude 选项轻松地完全排除该字段。我想要类似的东西来崩溃。这可能吗?

Gar*_*thr 5

Django 没有我所知道的内置方式来执行此操作,但我可以想到几种方法,您可以一次完成某件事,而不必手动修改大量字段集。

一种方法是使用 javascript 重写页面标记。也许 javascript 可以有一个字段名列表,每当它找到其中一个时,它就会隐藏该字段和它的标签,并向页面添加一个按钮来切换这些不可见的字段。

另一种方法只涉及python。通常,您只需将 admin 中的 fieldsets 属性指定为元组。但是你可以将它指定为一个导入函数,它接受通常的元组作为参数。在您的设置文件中,您可以指定要隐藏的字段名列表。然后,您需要编写一个返回修改过的元组的函数,将与您的字段名之一匹配的任何字段与折叠类一起移动到新的字段集中。

例如,在您的管理类中,您可以执行以下操作(您需要编写和导入 hide_fields)。

fieldsets = hide_fields(
    (None,
        {'fields':('title', 'content')}
    )
)
Run Code Online (Sandbox Code Playgroud)

这可能最终被解释为以下内容,假设内容在设置文件中作为您想要隐藏的内容:

fieldsets = (
    (None,
        {'fields':('title',)}
    ),
    ('Extra',
        {
            'fields':  ('content',),
            'classes':('collapse',),
        }
    ),
)
Run Code Online (Sandbox Code Playgroud)