如何将'collapse'添加到Django StackedInline

Dan*_*den 17 django django-admin collapse

以同样的方式,您可以将"类":['collapse']添加到您的一个ModelAdmin字段集中,我希望能够使内联模型管理员可以折叠.

此票证,在内联相关对象的管理界面中折叠,正好讨论了我想要完成的内容.但与此同时,在等待下一个版本时,最好的工作是什么?

仅供参考:我已经提出了解决方案,但我认为存在更好的解决方案.我会让投票来照顾它.

dan*_*ray 5

您可以使用 grappelli - 它支持折叠字段集。它使用的解决方案与上面提到的解决方案非常相似,但是 javascript / 编码已经完成 - 您只需将“类”:(折叠关闭,)添加到您的字段集(请参阅http://readthedocs.org/docs /django-grappelli/en/latest/customization.html )

例如:

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

class StackedItemInline(admin.StackedInline):
    classes = ('grp-collapse grp-open',)

class TabularItemInline(admin.TabularInline):
    classes = ('grp-collapse grp-open',)
Run Code Online (Sandbox Code Playgroud)


Dan*_*den 2

这是我解决它的方法,但感觉太像黑客了(对于黑客来说)。

我使用 Google API 托管的 jQuery 来修改 DOM,并利用 Django 自己的“显示/隐藏”脚本。如果你查看管理页面的 html 源代码,最后加载的脚本是这样的:

<script type="text/javascript" src="/media/admin/js/admin/CollapsedFieldsets.js"></script>
Run Code Online (Sandbox Code Playgroud)

该文件中的注释给了我一个想法:利用ModelAdmin 媒体定义来加载我自己的 dom 更改脚本。

from django.contrib import admin
from django.contrib.admin.sites import AdminSite
from myapp.models import *
import settings
media = settings.MEDIA_URL

class MyParticularModelAdmin(admin.ModelAdmin):
    # .....
    class Media:
          js = ('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js',
              media+'js/addCollapseToAllStackedInlines.js')
# .....
Run Code Online (Sandbox Code Playgroud)

然后在引用的 javascript 文件中:

// addCollapseToAllStackedInlines.js
$(document).ready(function() {
  $("div.inline-group").wrapInner("<fieldset class=\"module aligned collapse\"></fieldset>");
});
Run Code Online (Sandbox Code Playgroud)

最终结果仅适用于 StackedInline,不适用于 TabularInline。