上篇配置了数据库、编写完 Models 后,我们就不需要再关心数据库了,那我们如果想要修改数据要怎么做呢?
方法还是很多的,比如使用 Django 提供的数据库 API(API常用操作:https://www.cnblogs.com/zhming26/p/6265652.html)不过最小白的还是在管理员页面直接对数据进行增删改查,这篇就来介绍管理员 Admin
1. 创建管理员账号
命令:python manage.py createsuperuser
然后按照提示输入管理员的用户名,邮件地址,密码(注意:密码不予显示,千万别怀疑自己键盘坏了)
2. 在 polls/admin.py 注册需要被管理的数据模型
打开 admin.py 并录入admin.site.register(Question) :
from django.contrib import admin # Register your models here. # 导入Question模型 from .models import Question, Choice # 注册Question,这样就可以被管理 admin.site.register(Question)
运行命令:python manage.py runserver 启动服务器,这时候就可以在浏览器通过 url: http://127.0.0.1:8000/admin/ 访问我们的服务器了
输入用户名和密码登录后
之后我们就可以点击增加添加问题了
我们就成功地通过管理员页面操作数据了
3. 优化 admin 站点
如果只想要最基本的管理的话,用代码 admin.site.register(Question) 注册后即可,但我们希望它按照我们需要的格式显示和具有一些过滤查找功能,所以我们需要定义一个类来定制我们需要的格式和功能,难点在于要知道各种实现功能的代码写法,这里给出官方参考文档(https://docs.djangoproject.com/en/1.10/ref/contrib/admin/)
我们将对 question 的页面实现:
格式按【问题文本,发布日期 】显示
筛选器功能
关键字搜索查找功能
添加 Choice 功能
polls/admin.py
from django.contrib import admin # Register your models here. # 导入Question模型 from .models import Question, Choice # # 注册Question,这样就可以被管理 # admin.site.register(Question) # 创建自定义的Choice管理类 # 但必须继承自admin的某个类,这样才能使用它的功能 class ChioceInline(admin.TabularInline): # 关联Choice模型 model = Choice # 定义可添加数目 extra = 3 # 创建自定义的Question管理类 class QuestionAdmin(admin.ModelAdmin): # 定义显示格式:问题文本,发布日期 list_display = ('question_text', 'pub_date') # 定义筛选器,按发布日期筛选 list_filter = ['pub_date'] # 定义查找器,按问题文本查找 search_fields = ['question_text'] # 关联ChoiceInline对象 inlines = [ChioceInline] # 注册Question,按照QuestionAdmin定义的内容 admin.site.register(Question, QuestionAdmin)
之后的页面就变成了下面这个样子:
实现了搜索框(红色)、数据按照预设格式显示(紫色)、有过滤器(绿色)
其中过滤器检测到 pub_date 是 models.DateTimeField 类型,就自动生成默认的时间过滤条件,是不是很省事!
点击 What's up? 页面如下
这就实现了对 Choice 的关联,添加数量默认是我们 polls/admin.py 里面设置的 extre 的值,我们为 What's up? 问题添加两个 Choice 并保存,这样就成功为为 What's up? 问题添加了 Not much 和 The sky 两个 Choice