在01中,学习了基本的使用,如果你想创建一些数据的话,需要在Django shell 里面执行。
在Django中,也是可以通过创建数据管理后台。
01 设置时区、语言
修改HelloWorldPro/HelloWorldPro/settings.py
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
02 设置管理员用户
~/PycharmProjects/django-study/HelloWorldPro » python manage.py createsuperuser alonebo@alonebo-pc
用户名 (leave blank to use 'alonebo'): alonebo
电子邮件地址:
Password:
Password (again):
密码跟 电子邮件地址 太相似了。
密码长度太短。密码必须包含至少 8 个字符。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
runserver
~/PycharmProjects/django-study/HelloWorldPro » python manage.py runserver
打开Firefox
firefox localhost:8000/admin
django_admin_0.png
不出意外,界面是中文的。
但是现在,你还不能创建学生、学校的数据。下面开始讨论这个。
03 注册模型类
修改HelloWorldPro/helloapp/admin.py为如下:
from django.contrib import admin
# Register your models here.
from helloapp.models import Student, School
admin.site.register(Student)
admin.site.register(School)
修改之后刷新页面就能看到了。
复写__str__
方法可以更加人性化显示数据
04 自定义Admin页面
下面是一个基本的修改,在显示的时候会显示id,name
from django.contrib import admin
# Register your models here.
from helloapp.models import Student, School
class StudentAdmin(admin.ModelAdmin):
list_display = ['id', 'name']
admin.site.register(Student, StudentAdmin)
admin.site.register(School)
更多可以在有需要的时候查看官方文档。下面一个demo
from django.contrib import admin
from booktest.models import AreaInfo,PicTest
# Register your models here.
class AreaStackedInline(admin.StackedInline):
# 写多类的名字
model = AreaInfo
extra = 2
class AreaTabularInline(admin.TabularInline):
model = AreaInfo
extra = 2
class AreaInfoAdmin(admin.ModelAdmin):
'''地区模型管理类'''
list_per_page = 10 # 指定每页显示10条数据
list_display = ['id', 'atitle', 'title', 'parent']
actions_on_bottom = True # 按钮
actions_on_top = False
list_filter = ['atitle'] # 列表页右侧过滤栏
search_fields = ['atitle'] # 列表页上方的搜索框
# fields = ['aParent', 'atitle']
fieldsets = (
('基本', {'fields':['atitle']}),
('高级', {'fields':['aParent']})
)
# inlines = [AreaStackedInline]
inlines = [AreaTabularInline]
admin.site.register(AreaInfo, AreaInfoAdmin)
admin.site.register(PicTest)
4.1 编辑页自定义
- 显示字段顺序
fields=[‘age’, 'name']
- 分组显示
fieldset=(
('组1标题',{'fields':('字段1','字段2')}),
('组2标题',{'fields':('字段3','字段4')}),
)
- 关联对象
在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。子类TabularInline:以表格的形式嵌入。子类StackedInline:以块的形式嵌入。
class AreaStackedInline(admin.StackedInline):
model = AreaInfo#关联子对象
extra = 2#额外编辑2个子对象
class AreaAdmin(admin.ModelAdmin):
...
inlines = [AreaStackedInline]
class AreaTabularInline(admin.TabularInline):
model = AreaInfo#关联子对象
extra = 2#额外编辑2个子对象
class AreaAdmin(admin.ModelAdmin):
...
inlines = [AreaStackedInline]
05 重写Admin模板
修改settings.py
STATIC_URL = '/static/'
# 添加
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
- 1 创建templates/以及在该目录下创建admin目录
- 2 打开当前虚拟环境中Django的目录,再向下找到admin的模板
django/lib/python3.5/site-packages/django/contrib/admin/templates/admin
- 3 将需要更改文件拷贝到第一步建好的admin目录
- 4 编辑你复制的数据
{% 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 %}
原理: 会先在template目录找静态文件。