【问题标题】:Django - how to collapse forms like in the django adminDjango - 如何在 django admin 中折叠表单
【发布时间】:2013-02-02 01:46:57
【问题描述】:

我使用django-form-utils 生成带有类似于 django 管理员的字段集的 BetterModelForm。使用 BetterModelForm 可以将 CSS 与带有 'classes' 选项的字段集相关联。我想知道如何像在 Django-Admin 中那样折叠表单的字段集。

forms.py:

class ezAppOptionFormSet(BetterModelForm):


    class Meta:
        model = EzApp
        fieldsets = [('App options:', {'fields': ['level', 'center_1', 'center_2', 'width', 'height'], 'classes': ['collapse']}),
                ('Colors:', {'fields': ['color'], 'classes': ['collapse']})
                ]

模板.html:

    <form method="post" action="." encrypt="multipart/form-data">{% csrf_token %}
        <b>App name: {{ App_title }}</b>
        {% if formset.non_field_errors %}{{ formset.non_field_errors }}{% endif %}
        {% for fieldset in formset.fieldsets %}
            <fieldset class="{{ fieldset.classes }}">
            {% if fieldset.legend %}
                <legend>{{ fieldset.legend }}</legend>
            {% endif %}
            {% if fieldset.description %}
            <p class="description">{{ fieldset.description }}</p>
            {% endif %}
            <ul>
            {% for field in fieldset %}
                {% if field.is_hidden %}
                    {{ field }}
                {% else %}
                    <li{{ field.row_attrs }}>
                    {{ field.errors }}
                    {{ field.label_tag }}<br>
                    {{ field }}
                    </li>
                {% endif %}
            {% endfor %}
            </ul>
            </fieldset>
        {% endfor %}

【问题讨论】:

    标签: css django django-forms


    【解决方案1】:

    您需要使用 JavaScript 从客户端点击事件切换字段集的可见性。 jQuery 的 toggle 函数应该可以很好地解决这个问题。

    【讨论】:

      【解决方案2】:

      我这样做的方式是简单地使用 django admin 的 collapse.js 脚本。

      在模板中,导入脚本:

      <script type="text/javascript" src="/admin/jsi18n/"></script>
      <script type="text/javascript" src="/static/admin/js/core.js"></script>
      <script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script>
      <script type="text/javascript" src="/static/admin/js/jquery.js"></script>
      <script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
      <script type="text/javascript" src="/static/admin/js/actions.js"></script>
      <script type="text/javascript" src="/static/js/collapse.js"></script>
      

      然后将标签&lt;legend&gt; 更改为&lt;h2&gt; 和宾果游戏,你有同样的崩溃。

      <form method="post" action="." encrypt="multipart/form-data">{% csrf_token %}
          <b>App name: {{ App_title }}</b>
          {% if formset.non_field_errors %}{{ formset.non_field_errors }}{% endif %}
          {% for fieldset in formset.fieldsets %}
              <fieldset class="{{ fieldset.classes }}">
              {% if fieldset.legend %}
                  <h2>{{ fieldset.legend }}</h2>
              {% endif %}
              {% if fieldset.description %}
              <p class="description">{{ fieldset.description }}</p>
              {% endif %}
              <ul>
              {% for field in fieldset %}
                  {% if field.is_hidden %}
                      {{ field }}
                  {% else %}
                      <li{{ field.row_attrs }}>
                      {{ field.errors }}
                      {{ field.label_tag }}<br>
                      {{ field }}
                      </li>
                  {% endif %}
              {% endfor %}
              </ul>
              </fieldset>
          {% endfor %}
      

      【讨论】:

        猜你喜欢
        • 2011-02-16
        • 2011-01-26
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 2021-08-08
        相关资源
        最近更新 更多