Django:ORM关系字段
一,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关系字段相关推荐
- Django(ORM常用字段)
day68 参考:http://www.cnblogs.com/liwenzhou/p/8688919.html 1. Django ORM常用字段: 1. AutoField ...
- Django ORM获取字段的verbose_name
假设存在如下模块: class Article(models.Model):title = models.CharFiled("文章标题", max_length = 50)... ...
- Django - ORM字段和字段参数
目录 Django - ORM字段和字段参数 一. Django中的ORM 1. Django项目使用MySQL数据库 2.Model 3.基本用法 Django ORM 常用字段和参数 常用字段 其 ...
- Django --ORM常用的字段和参数 多对多创建形式
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- Django 数据库ORM 操作 - 字段的类型和参数
通过Django的ORM创建表的时候,我们需要定义自己的类. 定义类的时候,他有各种各样的字段类型,每个字段都有自己的参数可以进行配置,下面简单的归纳一下. 首先看看字段的类型.尽管Python提供了 ...
- django的orm指定字段名,表名 verbose_name_plural
django的orm指定字段名,表名 verbose_name_plural 1.指定字段名: 在定义字段的时候,增加参数db_column='real_field': 2.指定表名: 在model的 ...
- Django ORM查询之外键、关系的反向引用
关系本身就是相互的,只用在一个表中记录,而不是在有关系的两个表中都记录.所以外键.关系提供反向引用机制.当然,外键可以是多个表的外键,关系也可以与多个表有关系,所以反向引用必须显式指出关系对方表(然后 ...
- Django ORM操作
Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...
- Django ORM那些相关操作
一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/ 官网文档 常用的操作 <1> all() ...
最新文章
- vba获取通达信光标的坐标数据_「高阶应用」谈一下VB6和VBA的坐标系统
- 简单又实用的pandas技巧:如何将内存占用降低90%
- Spring 在 xml配置文件 或 annotation 注解中 运用Spring EL表达式
- 光明时评:人脸照片被买卖,立法监管宣传都要跟上
- HTML——a标签实现空链接(禁止跳转)
- python 网络爬虫介绍
- 我的2020(年终总结)
- 赋能尖端科技 推进智能布局 |《HPC高性能计算数据存储解决方案蓝皮书》正式发布
- HDU-4675 GCD of Sequence 数学
- Nginx的UDP健康检查
- COdeSmith的教程 CHM格式
- 神经网络与深度学习第1章:绪论 阅读提问
- Glide 圆角+居中裁剪centerCrop冲突问题
- 黑雷苹果模拟器_精灵盛典iOS模拟器版本 已更新上架黑雷
- Failure obtaining db row lock: No row exists in table QRTZ_LOCKS for lock named
- 生活四大勤,让老人延年益寿
- 小米5(mi5)开启-全面屏手势-详细步骤
- 认识一下网关,路由器,交换机,猫
- getElementByID getElementsByName getElementsByTagName用法详解
- 【干货收藏】统计分析/机器学习吐血整理最强指南