重定向
- 什么是重定向
- 语法
from djangp.htmmp import HttpResponseRedirect
return HttpResponseRedirect(url)
ORM操作
- 将数据表中所有人的年龄都增加10岁
update index_author set age=age+10
Author.objects.all().update(age=10)
F()操作
- 取出某个字段的值再做操作
- 例如
- 作用
- 语法
- F(‘列名’)
- 导入
from django.db.models import F
- 使用
Author.objects.all().update(age=F('age')+10)
- 注意:
- F必须用于某个操作中
- 脱离操作F无法使用
实战案例源码
Q()操作
Author.objects.filter(id=1,age=35)
且操作
- 那么或操作如何处理呢,这个时候就需要用到Q()了
- 作用
- 语法
from django.db.models import Q
- Q(表达式)|Q(表达式)
- 案例
- 查询作者表中id=3或者年龄大于等于70的信息
Author.objects.filter(Q(id__exact=3)|Q(age__gt=70))
select *from index_author where id=3 or age>=70
实战案例源码
原生的数据库操作方法
查询
原生sql语句实战案例源码
增删改的方法
with connection.cursor() as cursor
sql='delete from author whe id=1'
cursor.execute(sql)
return HttpResponse("...")
实战案例源码
使用后台管理Models
- 后台的配置
- 创建后台管理员
python manage.py createsuperuser
- 组
基本管理
- 在应用中的admin.py中注册要管理的实体类
- admin.py
- 作用
- 注册需要管理的models
- 只有再次注册的models才允许被管理
- 注册models
- 导入模型
from .models import Author,Publisher,Book
- 注册模型
admin.site.register(Author)
- 一条语句只能注册一个模型
- 要注册多个模型需要分多次注册
注册管理模型实战案例源码
修改models.py处理显示内容
- 在models.py中为各个class追加
def __str__(self):retur self "当前类的主要属性名"
实战案例源码
通过models类的内部类Meta定义每个类的展现形式
修改后台管理显示表名实战案例源码
高级管理
- 在admin.py中创建高级管理类
- 定义EntryAdmin,继承自admin.ModelAdmin
class AuthorAdmin(admin.ModelAdmin):
- 注册高级管理类
admin.site.register(Author,AuthorAdmin)
ModelAdmin的所有属性(摘录自Django源码)
定制高级管理信息
- list_display
- 作用
- 指定在列表页中能够显示的字段
- 参数
- 元组
list_display = ('name', 'age', 'email')
- 列表
list_display = ['name', 'age', 'email']
- 两种方式的显示效果在后台完全一样
- list_display_links
- 作用
- 指定在列表中能够连接到详情页的字段们
- 参数
- 由属性名称组成的元组或列表
- 必须出现在list_display的取值中
list_display_links = ['name', 'age', 'email']
- list_editable
- 作用
- 指定在列表页中就允许被编辑的字段们
- 参数
- 取值不能出现在list_display_links中
- 但是必须出现在list_display中
list_editable = ['age', 'email']
- search_fields
- 作用
- 添加允许被搜索的字段们
- 参数
- 元组
- 列表
- 案例
search_fields = ['name', 'age', 'email']
- list_filter
- 作用
- 在列表的右侧过滤器实现快速筛选
- 参数
- 元组
- 列表
- 案例
list_filter = ['age']
- date_hierarchy
- 作用
- 在列表页的上方增加一个时间选择器
- 可以根据时间实现快速筛选
- 参数
- DateField
- DateTimeField
- 案例
date_hierarchy = 'publicate_date'
- fields
- 作用
- 在详情页面中指定显示哪些字段,并按照什么样的顺序显示
- 当只希望部分字段允许被修改的时候可用
- 取值
- 元组
- 列表
- 案例
fields = ('name', 'city')
- fieldsets
- 作用
- 在详情页中,对字段们进行分组显示
- 注意
- fieldsets和fields是不能共存的
- 语法
- fieldsets=((字段1,字段2),(字段3,字段4…))
分组案例实战源码
关系映射
一对一映射
- 什么是一对一
- A表中的一条记录只能与B表中的一条记录相关联
- 案例
- 作者和作者详情
- 图书和图书详情
- 博客和博客详情
- 数据库中实现
- A表:设置主键
- B表:增加一列,并引用自A表的主键,增加一个唯一约束unique
- 语法
- 在关联的两个表中的任何一个类中增加
- 属性=models.OneToOneField(Entry)
- 报错问题
- 添加外键不给默认值会报错
- 处理方法一般有两种
- 1 删除原本的数据
- 2 将外键设置的一个default值或者null=True
- 查询
- 正向查询:通过wife找author
wife=wife.objects.get(id=1)
author=wife.author
- 反向查询:通过author找wife
- 技巧
类名小写__
author=Author.objects.get(id=3)
wife=author.wife
- wife是Django通过OneToOneField在Author中默认增加的一个隐式属性
正向查询作者妻子实战源码
反向查询妻子老公实战源码