Django以其快速生成后台管理系统而闻名,然而默认页面并不总能满足需求,因此自定义开发成为常态。本文是自定义Django Admin系列的第三篇,着重介绍详细页的开发。在详细页开发中,涵盖了字段排序、字段分组显示、外键字段排列、自定义form、radio_box标签展示等实用技巧。
一、字段排序
通过admin.ModelAdmin.fields
属性按照指定顺序显示字段,灵活定制详细页展示。
不显示日期
<code>@admin.register(MenPiao)</code><code>class MenPiaoAdmin(admin.ModelAdmin):</code><code> fields = ('name', 'price')</code>
门票和价格排在一行
<code>@admin.register(MenPiao)</code><code>class MenPiaoAdmin(admin.ModelAdmin):</code><code> fields = (('name', 'price'),'date')</code>
二、字段分组显示
利用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>
页面最终效果如下图:
‘classes’:(‘collapse’)表示折叠,如果不设置它就是平铺下去。
三、外键字段排列
使用admin.StackedInline
或admin.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>
四、自定义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>
© 版权声明
THE END
暂无评论内容