Python之关系字段
参考:https://blog.csdn.net/pugongying1988/article/details/72870264
关系字段:一对一,多对一,多对多
一对一: 现在有很多一对一辅导班,也就是上课时,一个老师对应一个学生,一个学生对应一个老师
多对一: 很多偏远山区的学校可能整个学校只有一个老师,这一个老师对应多个学生,所有的学生对应这一个老师
多对多: 而我们则很幸福,学校里有许多老师,一个老师教习一科,学生有多个老师,老师有多个学生。
除了上面的Fields,还有关系Field:
- ForeignKey,对应的是一对多的关系,可以指定关联删除-**on_delete=models.CASCADE**,如果要关联的对象还没有定义好,可以使用其名字。
- limit_choices_to,可以限制关联返回的内容。
- related_name,可以让关联的对象反查到源对象,如果不想创建反向关联,则设置为"+"即可。需要注意的是,如果没有使用该Field,那么想要使用反向关联,则需要**foo_set**,foo为关联对象的小写名称,如果使用了该Field,则可以直接使用自己定义的名称。
- related_query_name,和上面的作用类似,同样可以反向查询,两者只需要设置一个即可。
- to_field,指定关联对象的字段名称,默认情况下为对方的主键。
- db_constraint,控制是否在数据库中为这个外键创建约束,默认为True。
- on_delete,可以实现CASCADE,级联删除;PROTECT,防止被引用对象删除,抛出ProtectedError;SET_NULL,将其设置成null;
SET_DEFAULT,设置成默认值;SET,可以传递值,同时还可以传递可调用对象;DO_NOTHING,不采取任何动作。
- ManyToManyField,对应的是多对多的关系。
- symmetrical,只用在自己对自己进行关联的时候。比如说Friend,你的朋友是我,我的朋友是你。
- through,如果不想要Django自动创建的多对多的关系表,可以通过指定through指定自己定义的中介表。
- through_fields,在上面的基础上指定中间模型的**哪些字段**来建立是多对多关联。
- db_table,设定多对多关系表的名称。
- db_constraint,同上。
- swappable,
OneToOneField,对应的是一对一的关系,其可以直接返回关系另一边的对象,最主要的用途是作为扩展自另外一个模型的主键。比如多表继承就是利用这样的原理,通过对子模型添加一个隐式的一对一关联关系到父亲模型实现的。
如果你没有指定其的related_name参数,那么Django将使用当前模型的小写名称作为默认值。
如果访问相应的对象不存在的话,则会抛出ObjectDoesNotExist的异常。
当设置**parent_link**为True时,??
Python之关系字段的更多相关文章
- python 之 Django框架(ORM常用字段和字段参数、关系字段和和字段参数)
12.324 Django ORM常用字段 .id = models.AutoField(primary_key=True):int自增列,必须填入参数 primary_key=True.当model ...
- django--orm关系字段(ForeignKey、OneToOneField、ManyToManyField)详解
django中的关系字段 1.ForeignKey字段,即外键字段,对应一对多的情况,列如:一本书对应一个出版社,一个出版社可对应多本书. 2.ManyToManyFiled字段,即多对多字段,对应数 ...
- Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...
- 06 ORM常用字段 关系字段 数据库优化查询
一.Django ORM 常用字段和参数 1.常用字段 models中所有的字段类型其实本质就那几种,整形varchar什么的,都没有实际的约束作用,虽然在models中没有任何限制作用,但是还是要分 ...
- Python字典列表字段重组形成新的字典
最近遇到这样一个需求,需要将字典列表中的字段进行重组,形成一个新的字典.举个例子吧: l1 = [{"x": 22, "y": 22, "demand ...
- Python学习教程(learning Python)--3.3.3 Python逻辑关系表达式
在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识.逻辑关 ...
- Python学习教程(learning Python)--3.3.2 Python的关系运算
如果if的condition不用布尔表达式来做条件判断而采用关系表达式,实际上关系表达式运算的结果要么是True要么是False.下面我们先了解一些有关关系运算符的基础知识,如下表所示. 做个小程序测 ...
- Python面向对象关系
首先了解一下Python面向对象中类型-实例和父类-子类的关系.下面的一些规则很有用. 当我们介绍许多不同的对象时,我们只用了两种关系(图4.1 关系): 是一类(is a kind of)(实线): ...
- Python学习入门基础教程(learning Python)--3.3.3 Python逻辑关系表达式
在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识.逻辑关 ...
随机推荐
- 【转】每天一个linux命令(5):rm 命令
原文网址:http://www.cnblogs.com/peida/archive/2012/10/26/2740521.html 昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中 ...
- 利用用python构建 个性化签名
from tkinter import * from tkinter import messagebox,ttk from PIL import ImageTk import requests imp ...
- 【shell】sed命令
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
- Oracle环境变量设置脚本
每次都傻乎乎的往bashrc里面写环境变量,感觉不任性.于是,看了本书了解了/etc/oratab这个东东后,参考着书也写了一个设置Oracle环境变量的脚本. 在/etc/下创建oraset,权限设 ...
- Ajax异步上传多个文件并返回文件路径
前端JSP页面代码 <label>附件:</label><form id="fileForm"> <input type="fi ...
- WPF Demo3
<Window x:Class="Demo3.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/ ...
- 修改mui accordion(折叠面板)默认展开收缩行为
mui的折叠面板 accordion 默认展开收缩逻辑是,展开其中一个的同时收缩起同级已经展开的元素. 实际需求:展开其中一个不必收缩同级元素. 分析mui.js源代码: window.addEven ...
- 【Spring学习笔记-4】注入集合类List、Set、Map、Pros等
概要: 当java类中含有集合属性:如List.Set.Map.Pros等时,Spring配置文件中该如何配置呢? 下面将进行讲解. 整体结构: 接口 Axe.java package org.cr ...
- bzoj 4911: [Sdoi2017]切树游戏
考虑维护原树的lct,在上面dp,由于dp方程特殊,均为异或卷积或加法,计算中可以只使用fwt后的序列 v[w]表示联通子树的最浅点为w,且不选w的splay子树中的点 l[w]表示联通子树的最浅点在 ...
- java实验五——字符数组、String、StringBuffer的相互转化,StringBuffer的一些方法
package hello; import java.util.Scanner; public class 实验五 { public static void main(String[] args) { ...