2010-03-10 30 views
4

django admin允许你specify fieldsets。你正确地构造了一个将不同字段分组在一起的元组。您还可以为特定的字段组指定类。其中一类是崩溃,这将隐藏在可折叠区域下的字段。这对于隐藏很少使用或高级的字段以保持UI清洁非常有用。如何在Django Admin中折叠一个字段?

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

我可以很容易地使用exclude option完全排除该字段。我想要类似的崩溃。这可能吗?

回答

2

Django不具有一个内置在做这个,我所知道的方式,但我能想到的一对夫妇,你可以做些什么方式的一次,而不必手动修改大量的字段集。

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

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

例如在你的管理员类中,你可以做这样的事情(你需要编写和导入hide_fields)。

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

这可能最终会被解释成以下,假设内容是在设置你要隐藏的文件的东西:

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

如果你想要的话,你可以在你的admin.py中使用fieldset,并且你想要折叠的字段使用这个类作为折叠并保留为foobar。

参阅Django文档

+0

是的,我意识到这一点,我在我的问题的第一段中讨论它。 – Apreche

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); 
}); 
相关问题