Django Admin - 将折叠添加到字段集,但让它开始扩展

时间:2009-11-19 21:58:14

标签: django django-admin

有没有办法让字段集可折叠,但是开始扩展?向场集集类添加折叠时,它会获取功能但会开始折叠。我已经看过显示/隐藏字段集内容的JS,但看起来没有任何内容可以做我喜欢的内容,所以我假设我必须滚动拥有。只是想在我完成这项工作之前检查一下。

8 个答案:

答案 0 :(得分:9)

admin.py:

class PageAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('title', 'content', )
        }),
        ('Other Informations', {
            'classes': ('collapse', 'open'),
            'fields': ('slug', 'create-date',)
        }),
    )

模板/ app_label /模型名称/ change_form.html:

{% extends "admin/model_name/change_form.html" %}

{% block extrahead %}
    {{ block.super }}
    <script src="{{ STATIC_URL }}admin/js/collapse-open.js" type="text/javascript"></script>
{% endblock %}

静态/管理/ JS / collapse-open.py:

(function($) {
    $(document).ready(function() {
        $('fieldset.collapse.open').removeClass('collapsed');
    });
})(django.jQuery);

答案 1 :(得分:5)

我知道这已经很老了,但我也遇到过这个问题。在考虑得太难之后,我找到了一个简单的解决方案,似乎完成了涉及0个插件或其他js的工作。

在fieldsets中构建Add&#39; collapse in&#39;而不是'崩溃&#39;上课:

&#13;
&#13;
fieldsets = [
    ('Start Expanded', {
    'fields': ['field1', 'field2', 'field3'], 
    'classes': ['collapse in',]
    })
]
&#13;
&#13;
&#13;

答案 2 :(得分:2)

django-grappelli将此作为功能之一。这是关于该功能的wiki page(带有屏幕截图)。

答案 3 :(得分:2)

从Setomidor回答开始,我想建议一个更简单的替代方案,它可以完全符合您的要求(如果Grappelli不是一个选项,显然)。

按照说明(admin/(app)/(model)/change_form.html)和创建模板覆盖,而不是删除“添加”模型案例的可折叠效果,只需调用字段的click方法 - 设置collapser (即带有显示/隐藏文本的小链接),以便在页面加载后立即展开整个字段集。

答案 4 :(得分:2)

使用grappelli docs只需要添加“类”:('grp-collapse grp-closed')

例如

class EntryOptions(admin.ModelAdmin):
   ...
   fieldsets = (
     ('', {
        'fields': ('title', 'subtitle', 'slug', 'pub_date', 'status',),
     }),
     ('Flags', {
        'classes': ('grp-collapse grp-closed',),
        'fields' : ('flag_front', 'flag_sticky', 'flag_allow_comments',),
    }),

注意:如果您使用grappelli版本&lt; 2.4使用'grp-closed'而不是'collapse-closed'* 实际上'崩溃 - 关闭'仍在工作,但建议使用新类

答案 5 :(得分:0)

老问题,但我遇到了同样的问题,并提出了一个可以使用标准django实现的答案:

在您的模板目录中创建文件:admin /(app)/(model)/change_form.html,以使您(应用)的(模型)使用该表单文件。

将此代码添加到文件中:

{% extends "admin/change_form.html" %}

{% block extrahead %}
    <!-- Load superblock (where django.jquery resides) -->
    {{ block.super }}
    <!-- only do this on 'add' actions (and not 'change' actions) -->
    {% if add and adminform %}
    <script type="text/javascript">
        (function($) {
            $(document).ready(function($) {
                //Remove the 'collapsed' class to make the fieldset open
                $('.collapse').removeClass('collapsed');

                //Remove the show/hide links
                $('.collapse h2 a').remove();

                //Tidy up by removing the parenthesis from all headings
                var $headings = $(".collapse h2");
                $headings.each(function(i, current){
                    var str = $(current).text();
                    parenthesisStart = str.indexOf('(');
                    $(current).text(str.substring(0, parenthesisStart));
                });
            });                                 
        })(django.jQuery);                      
    </script>
    {% endif %}
{% endblock %}

有关使用django.jQuery而不是“常规”jQuery的更多信息,请参阅:http://blog.picante.co.nz/post/Customizing-Django-Admin-with-jQuery--Getting--is-not-a-function/

答案 6 :(得分:0)

我能找到的最快的方法是在字段集中添加一个新类start-open

classes = ['collapse', 'start-open']

,然后修改static/admin/js/collapse.js

来自:

    // Add toggle to anchor tag
    var toggles = document.querySelectorAll('fieldset.collapse a.collapse-toggle');
    var toggleFunc = function(ev) {
        ev.preventDefault();
        var fieldset = closestElem(this, 'fieldset');
        if (fieldset.classList.contains('collapsed')) {
            // Show
            this.textContent = gettext('Hide');
            fieldset.classList.remove('collapsed');
        } else {
            // Hide
            this.textContent = gettext('Show');
            fieldset.classList.add('collapsed');
        }
    };
    for (i = 0; i < toggles.length; i++) {
        toggles[i].addEventListener('click', toggleFunc);
    }

收件人:

    // Add toggle to anchor tag
    var toggles = document.querySelectorAll('fieldset.collapse a.collapse-toggle');
    // NEW: select toggles to open
    var open_toggles = document.querySelectorAll('fieldset.collapse.start-open a.collapse-toggle');
    var toggleFunc = function(ev) {
        ev.preventDefault();
        var fieldset = closestElem(this, 'fieldset');
        if (fieldset.classList.contains('collapsed')) {
            // Show
            this.textContent = gettext('Hide');
            fieldset.classList.remove('collapsed');
        } else {
            // Hide
            this.textContent = gettext('Show');
            fieldset.classList.add('collapsed');
        }
    };
    for (i = 0; i < toggles.length; i++) {
        toggles[i].addEventListener('click', toggleFunc);
    }
    // NEW: open toggles
    for (i = 0; i < open_toggles.length; i++) {
        toggles[i].click();
    }

答案 7 :(得分:0)

所以这个对我有用:

class PageAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('title', 'content', )
        }),
        ('Other Informations', {
            'classes': ('wide'),
            'fields': ('slug', 'create-date',)
        }),
    )