Django 进阶 之 定制Admin

Django自带的admin后台提供有丰富的扩展可供定制出符合自己需求的界面和功能

一、 本地化显示admin后台,显示成中文(显示语言与操作系统语言一致)

修改 /setting.py 给 MIDDLEWARE 中增加 'django.middleware.locale.LocaleMiddleware', 

位置在 'django.contrib.sessions.middleware.SessionMiddleware',  下面,如下:

 1 MIDDLEWARE = [
 2     'django.middleware.security.SecurityMiddleware',
 3     'django.contrib.sessions.middleware.SessionMiddleware',
 4     'django.middleware.locale.LocaleMiddleware',
 5     'django.middleware.common.CommonMiddleware',
 6     # 'django.middleware.csrf.CsrfViewMiddleware',
 7     'django.contrib.auth.middleware.AuthenticationMiddleware',
 8     'django.contrib.messages.middleware.MessageMiddleware',
 9     'django.middleware.clickjacking.XFrameOptionsMiddleware',
10 ]
/settings.py

 

二、 定制内置User的显示

 1 from django.contrib import admin
 2 from django.contrib.auth.admin import UserAdmin
 3 from django.contrib.auth.models import User
 4 
 5 class MyUserAdmin(UserAdmin):
 6     list_display = ('username','email','is_staff')  #定制User显示字段
 7     list_filter = ('is_staff',)     #定制筛选字段,如果没有,则筛选所有字段
 8     search_fields = ('username','email')    #定制搜索字段,如果没有,则从所有字段中搜索
 9 
10 admin.site.unregister(User)
11 admin.site.register(User, MyUserAdmin)
/settings.py

 

三、 定制自定义Model的显示

 1 from django.contrib import admin
 2 from polls.models import Poem,ToDo
 3 
 4 class PoemModelAdmin(admin.ModelAdmin):
 5     list_display = ('title','author')   #定制显示字段
 6     list_display_links = ['author',]    #定制点击内容到修改页面的字段
 7     search_fields = ['title','author']  #定制搜索字段
 8     list_editable = ['title',]   #定制列表页上可编辑的字段(同一字段不可以是既可链接又可编辑的)
 9     list_filter = ['author',]   #定制可过滤字段
10 
11     change_form_template = 'manage/change_form.html'  #定制修改页模板
12 
13     class Meta:
14         model = Poem
15 
16 
17 admin.site.register(Poem, PoemModelAdmin)
/polls/admin.py
1 {% extends 'admin/change_form.html' %}
2 {% block form_top %}
3     <p>注意:不要将作者和标题写错哦!</p>
4 {% endblock %}
/polls/templates/manage/change_form.html

 

四、 定义自定义Adim widget, 可以修改字段默认widget, 可以设置widget属性

 1 rom django.contrib import admin
 2 from polls.models import Poem,ToDo
 3 from django import forms
 4 
 5 class SubInputText(forms.TextInput):    # 自定义控件样式的调用
 6     class Media:
 7         css = {
 8             'all' : ('input.css',)
 9         }
10 
11 class PoemForm(forms.ModelForm):
12     class Meta:
13         model = Poem
14         fields = ['title','author']
15         widgets = {
16             'title': forms.Textarea(attrs={'cols':'30','rows':'2'}),    #显示为textarea
17             'author': SubInputText()    #设置显示样式
18         }
19 
20 class PoemModelAdmin(admin.ModelAdmin):
21     form = PoemForm
22 
23     class Meta:
24         model = Poem
25 
26 
27 admin.site.register(Poem, PoemModelAdmin)
/polls/admin.py
1 input[type=text]{
2     background: #efefef;
3 }
/static/input.css

 

posted @ 2017-05-30 15:04  taibai  阅读(125)  评论(0)    收藏  举报