深度定制Django Admin详细页

Django以其快速生成后台管理系统而闻名,然而默认页面并不总能满足需求,因此自定义开发成为常态。本文是自定义Django Admin系列的第三篇,着重介绍详细页的开发。在详细页开发中,涵盖了字段排序、字段分组显示、外键字段排列、自定义form、radio_box标签展示等实用技巧。
一、字段排序

通过admin.ModelAdmin.fields属性按照指定顺序显示字段,灵活定制详细页展示。

图片[1]-深度定制Django Admin详细页-山海云端论坛

不显示日期

<code>@admin.register(MenPiao)</code><code>class MenPiaoAdmin(admin.ModelAdmin):</code><code> fields = ('name', 'price')</code>
图片[2]-深度定制Django Admin详细页-山海云端论坛

门票和价格排在一行

<code>@admin.register(MenPiao)</code><code>class MenPiaoAdmin(admin.ModelAdmin):</code><code> fields = (('name', 'price'),'date')</code>
图片[3]-深度定制Django Admin详细页-山海云端论坛

二、字段分组显示

利用admin.ModelAdmin.fieldsets实现字段分组显示或布局。

<code>from django.contrib import admin</code><code><br></code><code>class FlatPageAdmin(admin.ModelAdmin):</code><code> fieldsets = (</code><code> (None, {</code><code> 'fields': ('url', 'title', 'content', 'sites')</code><code> }),</code><code> ('Advanced options', {</code><code> 'classes': ('collapse',),</code><code> 'fields': ('registration_required', 'template_name'),</code><code> }),</code><code> )</code>

页面最终效果如下图:

图片[4]-深度定制Django Admin详细页-山海云端论坛

‘classes’:(‘collapse’)表示折叠,如果不设置它就是平铺下去。

三、外键字段排列

使用admin.StackedInlineadmin.TabularInline实现外键字段的垂直或水平排列。

<code>class ShowtimeInline(admin.StackedInline):#垂直排列</code><code>class ShowtimeInline(admin.TabularInline):#水平排列</code><code> model = Prize</code><code>    extra = 1 #表示默认显示一个 </code><code><br></code><code>@admin.register(MenPiao)</code><code>class MenPiaoAdmin(ImportExportModelAdmin,admin.ModelAdmin):</code><code> inlines = [</code><code> ShowtimeInline</code><code> ]</code>
图片[5]-深度定制Django Admin详细页-山海云端论坛

四、自定义form

通过自定义forms.ModelForm替换默认的form,实现对详细页form的个性化定制。
例子:

<code>from django import forms</code><code>from django.contrib import admin</code><code>from myapp.models import Person</code><code><br></code><code>class PersonForm(forms.ModelForm):</code><code><br></code><code> class Meta:</code><code> model = Person</code><code> exclude = ['name']</code><code><br></code><code>class PersonAdmin(admin.ModelAdmin):</code><code> exclude = ['age']</code><code> form = PersonForm</code>

五、radio_box标签展示ForeignKey或choices

使用admin.ModelAdmin.radio_fields将ForeignKey或choices字段以radio_box标签形式展示。

<code>@admin.register(Prize)</code><code>class PrizeAdmin(admin.ModelAdmin):</code><code>    radio_fields = {"choujiang": admin.HORIZONTAL}#水平排列</code><code>    radio_fields = {"choujiang": admin.VERTICAL}#垂直排列</code>
图片[6]-深度定制Django Admin详细页-山海云端论坛
图片[7]-深度定制Django Admin详细页-山海云端论坛
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容