python+Django框架运用(四)
Django后台管理
基本配置
默认登录地址:http://127.0.0.1:8000/admin
创建后台管理员:
python3 ./manage.py createsuperuser # 回车后输入以下内容
Username:输入用户名
Email Address:电子邮箱
Password:密码
Password(again):重复密码
基本管理
1、在应用中的admin.py中注册要管理的实体类(models.py中的类)
from django.contrib import admin
from .models import * # 注册CartInfo和Order两个实体类
admin.site.register(CartInfo)
admin.site.register(Order)
2、修改models.py,来改变后台内容的显示
1). models.py中为各个类(实体类)追加一个方法。
def __str__(self):
return self.属性名
2). 通过Models类的内部类Meta定义每个类的展现形式
class Author(models.Model):
... ...# 定义对象在后台的展现形式
def __str__(self):
return self.names # 声明内部类,定义当前类在管理页面中的展现形式
class Meta:
# 1.修改当前表名为author(需要同步到数据库)
db_table = 'author' # 下面两个只与后台有关系
# 2.修改实体类在后台管理页中的名称(单数)
verbose_name = '作者'
# 3.修改实体类在后台管理页中的名称(复数)
verbose_name_plural = verbose_name # 4.先按照年龄降序排序,再按照ID升序排序
ordering = ['-age', 'id']
高级管理
1、在admin.py中创建高级管理类并注册
# 定义Author高级管理类
# 类名:实体类名+Admin,必须继承admin.ModelAdmin
class AuthorAdmin(admin.ModelAdmin):
pass # 注册高级管理类
admin.site.register(Author, AuthorAdmin)
2、定制高级管理信息
# 定义Author高级管理类
class AuthorAdmin(admin.ModelAdmin):
# list_display:指定在列表页中能够显示的字段
# 取值:由属性名称组成的元组或列表
list_display = ['names', 'age', 'email'] # list_display_links:定义列表页中能链接到详情页的字段
# 取值:由属性名称组成的元组或列表(必须存在与list_display中)
list_display_links = ['names', 'email'] # list_editable:指定在列表页中允许被编辑的字段
# 取值:由属性名称组成的元组或列表
# 不能出现在list_display_links, 但是必须在list_display中
list_editable = ['age'] # search_fields:添加允许被搜索的字段
# 取值:由属性名称组成的元组或列表
search_fields = ['names', 'email'] # list_filter:在列表的右侧增加过滤器,实现快速筛选
list_filter = ['names', 'email'] # fields:指定详情页显示的字段以及排列的顺序
# 取值:由属性名称组成的元组或列表
fields = ['email', 'names', 'age', 'isActive'] # date_hierarchy:在列表页的顶端增加一个时间选择器
# 取值必须是DateField或DateTimeField的值
date_hierarchy = 'publicate' # fieldsets:在详情页中,对字段进行分组显示(不能同时与fields存在)
fieldsets = [
# 分组1
(
'基本信息', {
'fields': ('names', 'email')
}
),
# 分组2
(
'可选信息', {
'fields': ('age', 'isActive'),
'classes': ('collapse',),
}
)
]
关系映射
一对一映射
一对一表示,A表中的一条记录只能与B表中的一条记录相关联。
数据库中实现方式:
A表:设置主键
B表:增加一列(字段),并引用自A表的主键,并且得增加唯一约束
1、在Django中的实现方式:
在要相关联的两个实体类中的任意一个中增加:
属性(字段)名 = models.OneToOneField(要关联的实体类名)
2、关联查询
# 在Wife类中新增一个字段一对一关联Author类
class Wife(models.Model):
...
author=models.OneToOneField(Author)
# 正向查询:通过wife 找 author
# 1.获取 id 为1 的 Wife的信息
wife = Wife.objects.get(id=1)
# 2.通过 Wife 的关联属性 author 来找Author
author = wife.author # 反向查询:通过author 找 wife
# 1.获取 id 为14 的 Author的信息
author = Author.objects.get(id=14)
# 2.通过 author 的关联属性 wife 来找wife
# wife是Django通过OneToOneField在Author(被关联表)中默认增加的一个隐式属性
wife = author.wife
一对多映射
一对多表示,A表中的一条记录能与B表中的多条记录相关联。反之,B表中的一条记录只能与B表中的一条记录相关联。
数据库中实现方式:
通过外键来实现一对多,在‘多’表中增加外键对‘一’表的主键进行引用
1、在Django中的实现:
在“多”的实体类中增加:
属性(字段)名 = models.ForeignKey("一"的实体类名)
2、关联查询
# Book(多) 和 Publisher(一)
class Book(models.Model):
... ...
publisher=models.ForeignKey(Publisher)
# 正向查询 - 通过Book查询Publisher
# 查询id为1的书籍的信息
book = Book.objects.get(id=1)
# 查询关联的publisher
publisher = book.publisher # 反向查询 - 通过Publisher查询Book
# Django会在 “一” 的实体中增加关联对象_set 属性,用于查询“多”的数据
# 结合 Publisher 和 Book 之间关系 :在 Publisher 中 增加了一个 book_set 属性
publisher=Publisher.objects.get(id=1)
books = publisher.book_set.all()
多对多关联
多对多表示,A表中的一条记录能与B表中的多条记录相关联。反之,B表中的一条记录同样能与B表中的多条记录相关联。
在数据库中的实现方式:
必选创建第三张表,关联两张多对多的数据表
1、在Django中实现方式:
在任意一个要实现多对多关联的实体类中增加:
属性(字段)名 = models.ManyToManyField(关联的实体类名)
2、关联查询
# 实体类Author 与 Book多对多关联
class Author(models.Model):
... ...
book = models.ManyToManyField(Book)
# 正向查询-通过Author查询所有的Book
author = Author.objects.get(id=1)
# 通过 关联属性.all() 查询所有对应数据
books = author.book.all() # 反向查询-通过Book查询所有的Author
# Django中 会在Book(被关联) 实体中增加一个隐式属性author_set
book = Book.objects.get(id=1)
authors = book.author_set.all()
对于关联映射的总结:
三种关联关系的查询中,都存在正向和反向两种查询方式
正向查询都是直接用增加的关联属性进行查询就可以
反向查询在Django中都会增加一个隐式属性,分别是:
一对一:关联的实体类名(小写)
一对多:在“一”的实体增加关联属性“_set”属性,用于查询"多"的数据
多对多:与一对多类似。
未完待续......
python+Django框架运用(四)的更多相关文章
- [Python] Django框架入门
说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...
- 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!
利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow + qrcode 模块 核心代码import qrcode qr = ...
- Python Django框架笔记(三):django工作方式简单说明和创建用户界面
(一) 说明 简单说明下django的工作方式,并举2个例子. (二) Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和s ...
- Python Django框架笔记(一):安装及创建项目
#推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. ...
- python django框架(一)
s4day63内容回顾: 1. 安装 2. 创建用户 + 授权 3. 连接 - 数据库 终端创建数据库(字符编码) - 数据表 终端 ORM pymysql create ...)engine=inn ...
- [Python] Django框架入门5——静态文件、中间件、上传图片和分页
说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文 ...
- Python Django框架笔记(五):模型
#前言部分来自Django Book (一) 前言 大多数web应用本质上: 1. 每个页面都是将数据库的数据以HTML格式进行展现. 2. 向用户提供修改数据库数据的方法.(例如:注册.发表评 ...
- python Django框架正式准备工作
之前由于不太了解数据库方面的知识,但经过一段时间的web应用的开发学习,成功的用其他框架连接了数据库,并完成了相关操作,数据爬取也初识了,更了解了python这门语言的语法,但路还很长,因此现在才能正 ...
- Python——Django框架——django-simple-captcha(验证码)
一.引用 包 pip install django-simple-captcha 二.将captcha加入setting的 INSTALLED_APPS 三.运行python manager.py m ...
- Python——Django框架——Model数据库模型
一.设置 1.Django的setting中配置数据库(MySQL配置) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql' ...
随机推荐
- [算法]Bobmer
package com.company; import com.sun.org.apache.bcel.internal.generic.AASTORE; import java.awt.*; imp ...
- squid白名单
http_access deny all #取消注释 http_access allow all --> http_access allow xxx_custom_ip #添加系统服务器IP白名 ...
- Redis学习资料整理
Redis学习资料: (1)Redis设计与实现 (2)十五分钟介绍 Redis数据结构 (3)redis安装 (4)redis指令手册中文版 Hiredis学习资料: (1)hiredis安装及测试 ...
- 爬虫之Scrapy详解
性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. import requests def fetch_async(url): ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- Java中-classpath和路径的使用
javac -classpath的使用: javac:如果当前你要编译的java文件中引用了其它的类(比如说:继承),但该引用类的.class文件不在当前目录下,这种情况下就需要在javac命令后面加 ...
- Asp.net中的web.config配置
目录 Asp.net中的web.config配置... 1 一. 配置文件保存位置... 2 二. 配置文件加载顺序... 2 三. 配置文件节点介绍... 3 1. . 3 2. . 5 3. . ...
- numpy的文件存储,读取 .npy .npz 文件
Numpy能够读写磁盘上的文本数据或二进制数据. 将数组以二进制格式保存到磁盘 np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 ...
- CodeForces - 768C Jon Snow and his Favourite Number 桶排
https://vjudge.net/problem/CodeForces-768C 题意:n个数,k次操作,x.每次操作先排序,再让奇数位置上的数据a[i]:=a[i] XOR x; k< ...
- 前端 HTML 常用标签 head标签相关内容
HTML常用标签 head标签 我们首先来介绍一下head标签的主要内容和作用,文档的头部描述了文档的各种属性和信息,包括文档的标题.编码方式及URL等信息,这些信息大部分是用于提供索引,辩认或其他方 ...