有没有办法在Django管理网站中添加标签页表单?

4 投票
3 回答
8148 浏览
提问于 2025-04-15 21:22

在使用Django自带的管理界面时,对于复杂的模型(字段很多的情况),"修改表单"页面可能会显得很长。

我想在这个"修改表单"中使用标签页,这样可以让内容更易读(通过标签页来分组字段...)

我不想自己一个人去修改'change_form.html'这个管理模板,所以想问问有没有人已经做过这个,愿意分享代码,或者有没有现成的Django插件可以用。

提前谢谢你的回答!

3 个回答

2

我知道有三种方法可以做到这一点:

  • 自己动手,通过覆盖 admin/change_form.html 模板来实现
  • 看看 django-admin-tabs 这个项目
  • 如果你想在 django-admin 中使用 Twitter Bootstrap 主题,可以试试 django-admintools-bootstrap(0.0.2 版本),这个主题非常不错!
3

我写了一个小应用,可以很简单地做到这一点:https://github.com/omji/django-tabbed-admin

这个应用的工作方式和Django中的字段组(fieldsets)类似,保持了Django的逻辑。你只需要从这个标签式模型(tabbed model)继承你的管理类(admin class)。你还可以把它和内联(inlines)结合起来,并按照你想要的方式排列它们。例如:

class BandAdmin(TabbedModelAdmin):

    tab_overview = (
        (None, {
            'fields': ('name', 'bio', 'style')
        }),
        MusicianInline,
        ('Contact', {
            'fields': ('agent', 'phone', 'email')
        })
    )
    tab_album = (
        AlbumInline,
    )
    tabs = [
        ('Overview', tab_overview),
        ('Albums', tab_album)
    ]
3

我不太确定这样做是否简单,但为什么不把这些字段放在一个字段集里,并让这个字段集可以折叠呢?这样可能不是最理想的选择,但可以直接使用。这里有一个在教程中的例子:

class PollAdmin(admin.ModelAdmin):
fieldsets = [
    (None,               {'fields': ['question']}),
    ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]

在这个例子中,'日期信息'的字段集可以折叠成只有标题栏的样子。

撰写回答