一,ForeignKey

外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。

ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。

1,字段参数

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 10class MyModel(models.Model):user = models.ForeignKey(to="User",to_field="id",on_delete=models.SET(func))

db_constraint

是否在数据库中创建外键约束,默认为True。

二,OneToOneField

一对一字段。

通常一对一字段用来扩展已有字段。

1,字段参数

to

设置要关联的表。

to_field

设置要关联的字段。

on_delete

同ForeignKey字段。

三,ManyToManyField

用于表示多对多的关联关系。在数据库中通过第三张表来建立关联关系。

1,字段参数

to

设置要关联的表

related_name

同ForeignKey字段。

related_query_name

同ForeignKey字段。

symmetrical

仅用于多对多自关联时,指定内部是否创建反向操作的字段。默认为True。

举个例子:

class Person(models.Model):name = models.CharField(max_length=16)friends = models.ManyToManyField("self")

此时,person对象就没有person_set属性。

class Person(models.Model):name = models.CharField(max_length=16)friends = models.ManyToManyField("self", symmetrical=False)

此时,person对象现在就可以使用person_set属性进行反向查询。

through

在使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系。

但我们也可以手动创建第三张表来管理多对多关系,此时就需要通过through来指定第三张表的表名。

through_fields

设置关联的字段。

db_table

默认创建第三张表时,数据库中表的名称。

2,元信息

ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。主要字段如下:

db_table

ORM在数据库中的表名默认是 app_类名,可以通过db_table可以重写表名。

index_together

联合索引。

unique_together

联合唯一索引。

ordering

指定默认按什么字段排序。

只有设置了该属性,我们查询到的结果才可以被reverse()。

转载于:https://www.cnblogs.com/kakawith/p/8710409.html

Django:ORM关系字段相关推荐

  1. Django(ORM常用字段)

    day68 参考:http://www.cnblogs.com/liwenzhou/p/8688919.html 1. Django ORM常用字段:             1. AutoField ...

  2. Django ORM获取字段的verbose_name

    假设存在如下模块: class Article(models.Model):title = models.CharFiled("文章标题", max_length = 50)... ...

  3. Django - ORM字段和字段参数

    目录 Django - ORM字段和字段参数 一. Django中的ORM 1. Django项目使用MySQL数据库 2.Model 3.基本用法 Django ORM 常用字段和参数 常用字段 其 ...

  4. Django --ORM常用的字段和参数 多对多创建形式

    1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...

  5. Django 数据库ORM 操作 - 字段的类型和参数

    通过Django的ORM创建表的时候,我们需要定义自己的类. 定义类的时候,他有各种各样的字段类型,每个字段都有自己的参数可以进行配置,下面简单的归纳一下. 首先看看字段的类型.尽管Python提供了 ...

  6. django的orm指定字段名,表名 verbose_name_plural

    django的orm指定字段名,表名 verbose_name_plural 1.指定字段名: 在定义字段的时候,增加参数db_column='real_field': 2.指定表名: 在model的 ...

  7. Django ORM查询之外键、关系的反向引用

    关系本身就是相互的,只用在一个表中记录,而不是在有关系的两个表中都记录.所以外键.关系提供反向引用机制.当然,外键可以是多个表的外键,关系也可以与多个表有关系,所以反向引用必须显式指出关系对方表(然后 ...

  8. Django ORM操作

    Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...

  9. Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常用的操作 <1> all() ...

最新文章

  1. vba获取通达信光标的坐标数据_「高阶应用」谈一下VB6和VBA的坐标系统
  2. 简单又实用的pandas技巧:如何将内存占用降低90%
  3. Spring 在 xml配置文件 或 annotation 注解中 运用Spring EL表达式
  4. 光明时评:人脸照片被买卖,立法监管宣传都要跟上
  5. HTML——a标签实现空链接(禁止跳转)
  6. python 网络爬虫介绍
  7. 我的2020(年终总结)
  8. 赋能尖端科技 推进智能布局 |《HPC高性能计算数据存储解决方案蓝皮书》正式发布
  9. HDU-4675 GCD of Sequence 数学
  10. Nginx的UDP健康检查
  11. COdeSmith的教程 CHM格式
  12. 神经网络与深度学习第1章:绪论 阅读提问
  13. Glide 圆角+居中裁剪centerCrop冲突问题
  14. 黑雷苹果模拟器_精灵盛典iOS模拟器版本 已更新上架黑雷
  15. Failure obtaining db row lock: No row exists in table QRTZ_LOCKS for lock named
  16. 生活四大勤,让老人延年益寿
  17. 小米5(mi5)开启-全面屏手势-详细步骤
  18. 认识一下网关,路由器,交换机,猫
  19. getElementByID getElementsByName getElementsByTagName用法详解
  20. 【干货收藏】统计分析/机器学习吐血整理最强指南

热门文章

  1. 浅谈专有云MQ存储空间的清理机制
  2. Java经典面试题整理及答案详解(四)
  3. 美术外包管理从原始1.0到工业4.0
  4. 回顾游戏中的设计模式:策略模式vs抽象工厂
  5. 可变大小区(Variable-Size Extents)
  6. 前端三部曲之Html -- 1(html的基本结构和常见的meta标签的作用)
  7. Oracle笔记之表空间
  8. HTML 样式兼容不同设备类型
  9. js相对路径相关(比如:js中的路径依赖导入该js文件的路径)
  10. LTE TDD的特殊子帧