有没有办法在Django管理网站中添加标签页表单?
在使用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']}),
]
在这个例子中,'日期信息'的字段集可以折叠成只有标题栏的样子。