Python--day68--Django ORM的字段参数、元信息
字段参数
null
用于表示某个字段可以为空。
unique
如果设置为unique=True 则该字段在此表中必须是唯一的 。
db_index
如果db_index=True 则代表着为此字段设置数据库索引。
default
为该字段设置默认值。
时间字段独有
DatetimeField、DateField、TimeField这个三个时间字段,都可以设置如下属性。
auto_now_add
配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。
auto_now
配置上auto_now=True,每次更新数据记录的时候会更新该字段。
关系字段
ForeignKey
外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。
ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。
字段参数
to
设置要关联的表
to_field
设置要关联的表的字段
related_name
反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。
例如:
class Classes(models.Model):
name = models.CharField(max_length=32) class Student(models.Model):
name = models.CharField(max_length=32)
theclass = models.ForeignKey(to="Classes")
当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写:
models.Classes.objects.first().student_set.all()
当我们在ForeignKey字段中添加了参数 related_name 后,
class Student(models.Model):
name = models.CharField(max_length=32)
theclass = models.ForeignKey(to="Classes", related_name="students")
当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写:
models.Classes.objects.first().students.all()
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
删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
def func():
return 10 class MyModel(models.Model):
user = models.ForeignKey(
to="User",
to_field="id",
on_delete=models.SET(func)
)
db_constraint
是否在数据库中创建外键约束,默认为True。
元信息
ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。主要字段如下:
db_table
ORM在数据库中的表名默认是 app_类名,可以通过db_table可以重写表名。
index_together
联合索引。
unique_together
联合唯一索引。
ordering
指定默认按什么字段排序。
只有设置了该属性,我们查询到的结果才可以被reverse()。
小贴士:大的数据库尽量不用外键,一般都是用软外键,或者说用代码去 操纵数据库。
最新文章
- NPOI的使用Excel模板导出
- Thrift入门及Java实例演示<;转载备用>;
- Quartz.NET开源作业调度框架系列(二):CronTrigger
- ios透明代理抓包
- (笔记)angular Select选择
- 最新的手机/移动设备jQuery插件
- javascript每日一练(七)——事件二:键盘事件
- 【ThinkingInC++】61、非成员运算符
- Homebrew - macOS 不可或缺的套件管理器
- 基于LBS的六边形热力图算法
- SQL SERVER 2008 服务器登录名、角色、数据库用户、角色、架构的关系
- LODOP打印安装到win的特殊字体
- Verilog定义计算位宽的函数clogb2
- 使用while和read命令读取文件内容
- java关键字总结
- windows 日志,IIS应用程序池回收日志
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- python+Django框架运用(三)
- appium+python自动化42-微信公众号
- 每天学一点儿HTML5的新标签
热门文章
- spring boot 异常处理(转)
- php安装oci8和pdo_oci扩展实现连接oracle数据库
- POJ 1845 (洛谷 :题目待添加)Sumdiv
- NOIP模拟 7.03
- The World&#39;s Top 15 Stock Exchanges by Domestic Market Capitalization
- 数据挖掘python,java
- 删除重复节点 Remove Duplicates from Sorted List
- 【JZOJ4964】【GDKOI2017模拟1.21】Rhyme
- Directx11教程41 纹理映射(11)
- SQL执行计划Cost与性能之间的的关系