字段参数

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()。

小贴士:大的数据库尽量不用外键,一般都是用软外键,或者说用代码去 操纵数据库。

最新文章

  1. NPOI的使用Excel模板导出
  2. Thrift入门及Java实例演示<转载备用>
  3. Quartz.NET开源作业调度框架系列(二):CronTrigger
  4. ios透明代理抓包
  5. (笔记)angular Select选择
  6. 最新的手机/移动设备jQuery插件
  7. javascript每日一练(七)——事件二:键盘事件
  8. 【ThinkingInC++】61、非成员运算符
  9. Homebrew - macOS 不可或缺的套件管理器
  10. 基于LBS的六边形热力图算法
  11. SQL SERVER 2008 服务器登录名、角色、数据库用户、角色、架构的关系
  12. LODOP打印安装到win的特殊字体
  13. Verilog定义计算位宽的函数clogb2
  14. 使用while和read命令读取文件内容
  15. java关键字总结
  16. windows 日志,IIS应用程序池回收日志
  17. Android Asynchronous Http Client-Android异步网络请求客户端接口
  18. python+Django框架运用(三)
  19. appium+python自动化42-微信公众号
  20. 每天学一点儿HTML5的新标签

热门文章

  1. spring boot 异常处理(转)
  2. php安装oci8和pdo_oci扩展实现连接oracle数据库
  3. POJ 1845 (洛谷 :题目待添加)Sumdiv
  4. NOIP模拟 7.03
  5. The World's Top 15 Stock Exchanges by Domestic Market Capitalization
  6. 数据挖掘python,java
  7. 删除重复节点 Remove Duplicates from Sorted List
  8. 【JZOJ4964】【GDKOI2017模拟1.21】Rhyme
  9. Directx11教程41 纹理映射(11)
  10. SQL执行计划Cost与性能之间的的关系