Django会根据你写的模型文件完全自动地生成管理界面。

管理界面不是让访问网站的人使用的,它服务于网站管理者。 它用于网站的管理员。

3.1创建一个管理员用户

3.2进入管理站点

3.3管理站点的功能

3.4自定义管理表单

3.5添加关联对象

3.6自定义管理界面

3.1创建一个管理员用户

首先,运行命令

python manage.py createsuperuser
根据提示输入用户名和邮件和密码
创建管理员用户成功

3.2进入管理站点

Django的管理站点是默认启用的,启动开发服务器

python manage.py runserver

现在,打开一个浏览器访问你本地域名中的 “/admin/” —— 例如http://127.0.0.1:8000/admin/。你应该会看到管理站点的登录界面

用创建的超级用户账号来登录这个站点。 会看到Django管理站点的首页面

3.3管理站点的功能

在创建的polls应用中,管理站点注册一个Question对象

#polls/admin.py

from django.contrib import admin

from .models import Question

admin.site.register(Question)

注册了Question对象,Django会把它显示在管理站点的首页面上,

表单是根据Question模型文件自动生成的。

可以在管理站点对其进行查看,编辑和添加,删除

3.4自定义管理表单

#polls/admin.py

from django.contrib import admin

from .models import Question

class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text'] #更改管理选项 admin.site.register(Question, QuestionAdmin) #管理站的中注册模型

建一个模型管理对象,将其作为第二个参数传递给admin.site.register()

fields = ['pub_date', 'question_text']这一更改,使得“Publication date”字段排在“Question”字段前面

#polls/admin.py

from django.contrib import admin

from .models import Question

class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
] admin.site.register(Question, QuestionAdmin)

fieldsets中每个元组的第一个元素是字段集的标题,在管理站的中可以看到增加了标题’Date infomation’

#polls/admin.py

from django.contrib import admin

from .models import Question

class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
] admin.site.register(Question, QuestionAdmin)

可以任意地为每个字段集指定HTML样式类,

'classes': ['collapse']使得显示呈折叠状

3.5添加关联对象

我们已经有了Question管理界面,但是Question有多个Choice,管理界面并没有将选项显示出来

有两种方法来解决这个问题。

第一种是像我们为Question做的一样,在管理站点中注册Choice。

#polls/admin.py

from django.contrib import admin

from .models import Choice, Question
# ...
admin.site.register(Choice)

可以在Django管理站点中管理“Choices”

点击所以'Add choice',由于Choice与Question用ForeignKey关联,在管理界面中显示为一个<select>选框,如果在这个窗口中添加了一个Question并点击“Save”,Django会将保存这个Question到数据库中,然后动态地将这个对象添加为你正在查看的“Add choice”表单的选择项。

第二种方法,在创建Question对象的同时可以直接添加一组Choice将会更好。

移除对Choice模型的register()调用。然后将Question的注册代码编辑为:

#polls/admin.py

from django.contrib import admin

from .models import Choice, Question

class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3 class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline] admin.site.register(Question, QuestionAdmin)

这告诉Django:Choice对象在Question的管理界面中编辑。同时默认提供足够3个Choice的空间。

打开管理站点,可以看到关联的对象。

还有个小问题。 显示所有关联的Choice 对象的字段占用大量的屏幕空间。 为了解决这个问题,Django提供了一种以表格的形式显示内嵌的相关联对象的方法,

改变一下ChoiceInline 的声明:

#polls/admin.py

class ChoiceInline(admin.TabularInline):
#...

使用 TabularInline(不是StackedInline),这些相关联的对象显示成紧凑的、基于表格的形式

3.6自定义管理界面

默认的 ,Django显示每个对象str()返回的内容,如果想要显示其他字段,使用list_display 选项来实现这个功能,同时引入自定义的

方法was_published_recently

#polls/admin.py

class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')

在管理页中,我们可以看到,Question的变更页面自动添加了question,date,was_published_recently的内容。

如果想要给was_published_recently添加属性

#polls/models.py

class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'

于是was_published_recently具有了布尔值属性,同时显示图标,short_description将标题显示为Published recently?

最后改进Question变更列表页面:使用list_filter来添加过滤器,

search_fields添加一些搜索功能:
#polls/admin.py

from django.contrib import admin
from .models import Question,Choice # Register your models here.
class ChoiceInline(admin.TabularInline): #基于表格的显示
model = Choice
extra = 3 #默认空白 class QuestionAdmin(admin.ModelAdmin):
fieldsets = [(None, {'fields':['question_text']}),
('Date infomation', {'fields':['pub_date'],'classes': ['collapse']})]
inlines = [ChoiceInline] list_display = ['question_text','pub_date','was_published_recently'] #显示的字段名称的元组,和其他字段
list_filter = ['pub_date'] #过滤功能,根据date属性
search_fields = ['question_text'] #搜索功能 class ChoiceAdmin(admin.ModelAdmin):
fields = ['question','choice_text','votes'] admin.site.register(Question,QuestionAdmin)

3 第一个Django应用 第2部分(管理站点)的更多相关文章

  1. 第一个django

    4.创建第一个Django工程 Django环境算是配置完成了,你可以到命令提示符下创建第一个Django应用,进入某个目录,执行django-admin.py startproject myproj ...

  2. 搭建你的第一个Django应用程序

    首先你要确保你机器上面安装了python:Python开发_python的安装 python的相关学习资料:http://www.cnblogs.com/hongten/tag/python/ 其次, ...

  3. Python开发入门与实战2-第一个Django项目

    2.第一个Django项目 上一章节我们完成了python,django和数据库等运行环境的安装,现在我们来创建第一个django project吧,迈出使用django开发应用的第一步. 2.1.创 ...

  4. 编写你的第一个 Django 程序 第2部分

    原地址:http://django-chinese-docs.readthedocs.org/en/latest/intro/tutorial02.html 本教程上接 教程 第1部分 . 我们将继续 ...

  5. 编写你的第一个 Django 程序 第1部分

    原地址:http://django-chinese-docs.readthedocs.org/en/latest/intro/tutorial01.html 让我们通过例子来学习. 在本教程中,我们将 ...

  6. Django教程:第一个Django应用程序(4)

    Django教程:第一个Django应用程序(4) 2013-10-09 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...

  7. Django教程:第一个Django应用程序(3)

    Django教程:第一个Django应用程序(3) 2013-10-08 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...

  8. Django 1.10中文文档—第一个Django应用Part1

    在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点: 一个可以进行增删改查的后台admin管理界面: 我们假设你已经安装了Django.您可以 ...

  9. Django学习(七) 创建第一个Django项目

    如果这是你第一次使用Django,你必须进行一些初始设置.即,您将需要自动生成一些代码,建立了Django项目. 从命令行.cd进入一个目录,你想要存储您的代码,然后运行以下命令: django-ad ...

随机推荐

  1. ORA-00907: 缺失右括号,原因及解决办法整理

    ORA-00907: 缺失右括号,原因及解决办法整理 1 union all中order by 导致缺失右括号 在有union all的子查询中使用了order by,会导致缺失右括号的错误,事实上在 ...

  2. Sitecore开发 IP地理定位服务入门

    如果您是营销人员或开发人员,并且有兴趣在Sitecore安装中使用Sitecore IP Geolocation服务,那么本文就是为您准备的. 借助Sitecore IP地理定位服务,您网站的访问者可 ...

  3. C#窗体程序与sql sever 数据库链接

    一.所用工具 Visual Studio 2017和SQL Server Management Studio 2012 二.连接 打开SQL Server Management Studio 2012 ...

  4. websocket 二合一

    server from flask import Flask, request, render_template from geventwebsocket.handler import WebSock ...

  5. django+nginx+python3 生产环境部署

    一.安装python基础环境 1.安装各类基础模块 yum install  gcc-c++ wget openssl-devel bzip2-devel expat-devel gdbm-devel ...

  6. 【题解】Luogu P2766 最长不下降子序列问题

    原题传送门 实际还是比较套路的建图 先暴力dp一下反正数据很小 第一小问的答案即珂以求出数列的最长不下降子序列的长度s 考虑第二问如何做: 将每个点拆点 从前向后连一条流量为1的边 如果以它为终点的最 ...

  7. Vue的介绍及基础指令

    一.什么是Vue Vue.js是一个渐进式 JavaScript 框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 为什么要学习Vue 三 ...

  8. wrk 压测中请求无法响应问题解决过程

    ================= 遇到问题 =================$ 直连压测 wrk -c10000 -t100 -d100m http://localhost:9981/order/ ...

  9. 四:DRF项目开发的准备

    一: 虚拟环境virtualenv 如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就 ...

  10. Redis入门指南之一(简介)

    1. 简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同的场景下的缓存与存储需求.同时Redis的诸多高级功能使其可以胜任消息队列.任务队列等不同的 ...