1准备工作:
创建管理员的用户名和密码。
python manage.py createsuperuser
2本地化
在setting文件中更改:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
3在应用的admin.py中注册模型类
打开booktest/admin.py文件,注册地区模型。
from django.contrib import admin
from booktest.models import *
admin.site.register(AreaInfo)
输入如下网址:
http://127.0.0.1:8000/admin/
登录后
模型类注册好后显示如下默认100条
我们显示10条
class AreaInfoAdmin(admin.ModelAdmin):
'''模型管理类'''
list_per_page = 10 #指定每页10条
admin.site.register(AreaInfo,AreaInfoAdmin)
列表中的列
模型定义如下
class AreaInfo(models.Model):
'''地区模型类'''
atitle = models.CharField(max_length=20,verbose_name='标题')
# 关系属性,代表当前
aParent = models.ForeignKey('self',null=True,blank=True)
def __str__(self):
return self.atitle
def title(self):
return self.atitle
#方法列是不能排序的,如果需要排序需要为方法指定排序依据。
title.admin_order_field = 'atitle'#指定方法的列的排序规则
title.short_description = '地区名称'#指定方法的列的名称
class AreaInfoAdmin(admin.ModelAdmin):
'''模型管理类'''
list_per_page = 10 #指定每页10条
list_display = ['id','atitle','title']
admin.site.register(AreaInfo,AreaInfoAdmin)
右侧栏过滤器
class AreaInfoAdmin(admin.ModelAdmin):
'''模型管理类'''
list_per_page = 10 #指定每页10条
list_display = ['id','atitle','title']
#列表右侧过滤栏
list_filter = ['atitle'] #列表页以标题过滤
# 列表页上方的搜索框
search_fields = ['atitle']
admin.site.register(AreaInfo,AreaInfoAdmin)
关联对象
在模型类中添加方法
class AreaInfo(models.Model):
'''地区模型类'''
atitle = models.CharField(max_length=20,verbose_name='标题')
# 关系属性,代表当前
aParent = models.ForeignKey('self',null=True,blank=True)
def __str__(self):
return self.atitle
def title(self):
return self.atitle
title.admin_order_field = 'atitle'#指定方法的列的排序规则
title.short_description = '地区名称'#指定方法的列的名称
def parent(self):
#避免父级为空的情况报错
if self.aParent is None:
return ''
return self.aParent.atitle
parent.short_description = '父级地区'
编辑页
显示字段顺序
class AreaAdmin(admin.ModelAdmin):
fields=['aParent','atitle']
分组显示
class AreaInfoAdmin(admin.ModelAdmin):
'''模型管理类'''
list_per_page = 10 #指定每页10条
list_display = ['id','atitle','title','parent']
#列表右侧过滤栏
list_filter = ['atitle'] #列表页以标题过滤
# 列表页上方的搜索框
search_fields = ['atitle']
# #显示字段顺序
# fields = ['aParent','atitle']
# 分组显示
fieldsets = (
('基本',{'fields':['atitle']}),
('高级',{'fields':['aParent']}),
)
关联对象
在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。子类TabularInline:以表格的形式嵌入。子类StackedInline:以块的形式嵌入。
from django.contrib import admin
from booktest.models import *
class AreaStackedInline(admin.StackedInline):
model = AreaInfo
extra = 2
class AreaInfoAdmin(admin.ModelAdmin):
'''模型管理类'''
list_per_page = 10 #指定每页10条
list_display = ['id','atitle','title','parent']
#列表右侧过滤栏
list_filter = ['atitle'] #列表页以标题过滤
# 列表页上方的搜索框
search_fields = ['atitle']
# #显示字段顺序
# fields = ['aParent','atitle']
# 分组显示
fieldsets = (
('基本',{'fields':['atitle']}),
('高级',{'fields':['aParent']}),
)
inlines = [AreaStackedInline]
admin.site.register(AreaInfo,AreaInfoAdmin)
重写模板
- 在templates/目录下创建admin目录,结构如下图
- 打开当前虚拟环境中Django的目录,再向下找到admin的模板
/home/python/.virtualenvs/py_django/lib/python3.5/site-packages/django/contrib/admin/templates/admin
- 将需要更改文件拷贝到第一步建好的目录里,此处以base_site.html为例
- 编辑base_site.html文件
{% extends "admin/base.html" %}
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
<hr>
<h1>自定义的管理页模板</h1>
<hr>
{% endblock %}
{% block nav-global %}{% endblock %}