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


问题内容

django管理员允许您指定字段集。您可以正确构造一个将不同字段组合在一起的元组。您还可以为某些字段组指定类。这些类别之一是崩溃,这会将字段隐藏在可崩溃的区域下。这对于隐藏很少使用或高级的字段以保持UI干净非常有用。

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

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


问题答案:

Django没有我知道的内置方法,但是我可以想到几种可以一次执行某项操作的方法,而不必手动修改许多字段集。

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

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

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

fieldsets = hide_fields(
    (None,
        {'fields':('title', 'content')}
    )
)

假设内容在设置文件中为您要隐藏的内容,则可能会被解释为以下内容:

fieldsets = (
    (None,
        {'fields':('title',)}
    ),
    ('Extra',
        {
            'fields':  ('content',),
            'classes':('collapse',),
        }
    ),
)