【问题标题】:How To Collapse Just One Field in Django Admin?如何在 Django Admin 中仅折叠一个字段?
【发布时间】:2011-01-26 02:30:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      我做这样的事情,我有一个或多个字段只需要基于另一个的值。这通常是一个复选框或选择,其中 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);
      });
      

      【讨论】:

        【解决方案3】:

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

        参考 django 文档

        【讨论】:

        • 是的,我知道这一点,并在我的问题的第一段中讨论它。
        猜你喜欢
        • 2011-11-30
        • 2013-02-02
        • 2011-02-16
        • 1970-01-01
        • 2019-11-11
        • 2010-12-20
        • 2020-04-12
        • 1970-01-01
        • 2013-02-05
        相关资源
        最近更新 更多