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

时间:2010-03-10 20:57:31

标签: python django django-admin

django管理员允许您specify fieldsets。您正确构建了一个将不同字段组合在一起的元组。您还可以为某些字段组指定类。其中一个类是崩溃,这将隐藏在可折叠区域下的字段。这适用于隐藏很少使用或高级字段以保持UI清洁。

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

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

3 个答案:

答案 0 :(得分:4)

Django没有内置的方法,我知道这一点,但我可以想到一些方法,你可以做一次,而不是必须手动修改大量的字段集。

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

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

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

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

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

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

答案 1 :(得分:0)

我这样做,我只有一个或多个字段需要根据另一个字段的值。这通常是一个复选框或选择,其中true / false或一个特定值意味着我们应该显示另一组字段。我添加了这样的东西:

$(document).ready(function(){
    function show_hide() {
        var is_checked = $('#id_first_field').attr('checked');
        $('.second_field')[is_checked ? 'show' : 'hide']();
    }
    show_hide();
    $('#id_first_field').change(show_hide);
});

答案 2 :(得分:-3)

如果您需要,可以在admin.py中使用fieldset,并在要折叠的字段中将该类用作折叠并保留为foobar。

请参阅django docs