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”属性,用于查询"多"的数据
多对多:与一对多类似。
未完待续......
转载于:https://www.cnblogs.com/hxgoto/p/9364879.html
python+Django框架运用(四)相关推荐
- Python Django框架入门第一课
Python Django框架入门 1.Django简介 Django使用python开发的一个免费的Web框架,几乎囊括了Web应用的方方面面,用于快速搭建高性能.优雅的网站. 2.配Django运 ...
- 基于Python Django框架后端的微信小程序开发
刚做完一个股票信息服务类的微信小程序(小程序名字"博股论基",大家有兴趣可以搜一下),也有一些心得,在这里记录一下开发过程,算是个开发笔记,同时也希望能给需要的同学一些帮助. -- ...
- python网站设计理念_简单介绍下python Django框架的历史,设计理念及优势_Django讲解2...
简单介绍下python Django框架的历史,设计理念及优势 Django是一个高层次的 Python Web 框架,它是一个鼓励快速开发和干净,实用的框架设计.Django可以更容易地快速构建更好 ...
- liunx+python+django框架实现图片生成二维码
点击箭头处"蓝色字",免费领测试技术及面试资料! 余生皆欢喜 liunx+python+django框架实现二维码生成器 首先我简单的介绍下django:django官网解释就是如 ...
- 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!
利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow + qrcode 模块 核心代码import qrcodeqr = q ...
- Python+Django框架Web应用开发-欧阳桫-专题视频课程
Python+Django框架Web应用开发-237人已学习 课程介绍 系统介绍使用Django框架开发Web应用程序,当然,依然水煮风格 课程收益 掌握Django框架的使用 ...
- [Python] Django框架入门
说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...
- python django框架如何导出_python框架django的数据库的正向生成和反向生成
正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model.py的表. 反向生成,指的是先在数据库中create table,然后通过dj ...
- python django框架分析_Django框架模型简单介绍与使用分析
本文实例讲述了Django框架模型简单介绍与使用.分享给大家供大家参考,具体如下: ORM介绍 ORM Object relational mapping 对象关系映射 把面向对象中的类和数据库表一一 ...
- Python——Django框架——Model数据库模型
一.设置 1.Django的setting中配置数据库(MySQL配置) DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql',' ...
最新文章
- ie浏览器修复_Win8系统电脑无法打开运行IE浏览器的解决方法
- 2021年CISCN初赛re
- dva处理_umi项目中dvaeffects异常统一处理
- 27.4. /etc/bandwidthd.conf
- 冒泡排序(Java版)
- 计算平面坐标某点(x,y)与原点(0,0)的角度
- android okgo参数,Android OkGo基本操作
- reveal end of document
- CVPR 2020 Workshop on Continual learning in Computer Vision 征稿
- 个人成长过程中最重要的技能是什么?
- 周志华机器学习西瓜书速记第二章绪论模型评估与选择(二)
- Arcgis自带世界矢量图
- 小楼一夜听春雨···
- C语言程序设计实验报告——实验七
- java中私有变量和方法_Java 私有变量和私有方法
- 微信群控系统源码的实现原理,核心源码实现,核心框架。
- 数据库(Mysql)学习
- Lora Ra-01模块初步调试问题记录
- python虚拟跑步机
- 《2040大预言:高科技引擎与社会新秩序》——2.4 在芯片上建造大金字塔