【1】多表操作
- 基于对象跨表查(子查询)
- 执行两句sql语句,没有连表操作
- 基于双下划线的连表查
- 一次查询,连表操作
【2】聚合查询(aggregate)
- 聚合函数
- Min、Max、sum、Avg、Count
【3】分组查询(annotate)
- annotate
- filter在annotate前:表示过滤,where条件
- values在annotate前:表示分组的字段,如果不写表示按整个表分组
- filter在annotate后:表示 having条件
- values在annotate后:表示取字段---》只能取分组字段和聚合函数字段
【4】F查询
【5】Q查询
【6】其它字段和字段参数
【6.1】字段参数:ORM字段参数
- null
- 表示某个字段可以为空。
- unique
- 如果设置为unique=True 则该字段在此表中必须是唯一的
- db_index
- db_index=True 则代表着为此字段设置索引
- default
- 为该字段设置默认值。
- DateField和DateTimeField
- auto_now_add=True:新增会把当前时间存入
- default=datatime.datatime.now
- auto_now=True,每次更新数据记录的时候会更新该字段
- verbose_name
- 提示,该字段的作用
- blank
- Admin中是否允许用户输入为空
- editable
- Admin中是否可以编辑
- help_text
- Admin中该字段的提示信息
- choices
- Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
- 路由写法:get_字段名_display()
【6.2】ForeignKey属性
- to
- 设置要关联的表
- to_field
- to_field 设置要关联的表的字段
- related_name
- 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’
- related_query_name
- 反向查询操作时,使用的连接前缀,用于替换表名
- on_delete:当删除关联表中的数据时,当前表与其关联的行的行为
- models.CASCADE
- 删除关联数据,与之关联也删除
- models.DO_NOTHING
- 删除关联数据,引发错误IntegrityError
- models.PROTECT
- 删除关联数据,引发错误ProtectedError
- models.SET_NULL
- 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
- models.SET_DEFAULT
- 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
- models.SET:删除关联数据
- 与之关联的值设置为指定值,设置:models.SET(值)
- 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
- db_constraint
- 是否在数据库中创建外键约束,默认为True
- db_constraint=False 在数据库中不建立外键约束
- 虽然不建立数据库外键约束---》但是orm查询,继续用
- ManyToManyField
- 用于表示多对多的关联关系。在数据库中通过第三张表来建立关联关系
- to
- 设置要关联的表,中间是有个中间表的,区别于一对多
- related_name
- 同ForeignKey字段
- related_query_name
- 同ForeignKey字段
- through
- 在使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系
- 但我们也可以手动创建第三张表来管理多对多关系,此时就需要通过through来指定第三张表的表名
- through_fields
- 设置关联的字段
- db_table
- 默认创建第三张表时,数据库中表的名称
- models.CASCADE