0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author、AuthorDetail两表 author = models.OneToOneField(to='Author...):出版社删除书外键不动,书删除没有任何影响 2)出版社找书用 外键related_name(books),书找出版社 外键字段(publish) 3)db_constraint断开表关联,on_delete...models.DO_NOTHING为删除级联关系, models.CASCAD为级联关系,'SET_NULL'置空,SET_DEFAULT设为默认值 两者区别 models.SET关联表内容删了,关联的相关内容不会删除...models.CASCAD关联表内容删了,关联的相关内容会删除 db_constraint关系断开后,但是不影响联表查询 四.多对多关系 例如Book、Author两表 authors = models.ManyToManyField...,反向找 外键字段related_name 3)db_constraint断开表关联,on_delete不存在(不设置,本质在第三张表中设置,且一定是级联)
例如,我们在自己的app中创建了如下几个model:post,event。迁移之后,我们来查看一下ContentType這个数据表中生成的数据: 如上图,生成了app与model的对应关系。...对于新鲜事这个功能来说就是使用GenericRelation来产生一个特殊的外键,它不像models.ForeignKey那样,必须指定一个Model来作为它指向的对象。...前面说到django在保存一个object的时候会发出一系列signals,在这里我们所监听的是signals.post_save这个signal,这个signal是在django保存完一个对象后发出的...post相关联的所有事件,最重要的一点是如果没有这个字段,那么当删除一篇post的时候,与该post关联的事件是不会自动删除的。...总之,如果一个表与其他表有多个外键关系,我们可以通过ContentType来解决这种关联。
你可以在注册时通过配置来实现。 现在先来试试重新排序表单上的字段。...Django在admin站点中,自动地将所有的外键关系展示为一个select框。在我们的例子中,目前只有一个question对象存在。 请注意图中的绿色加号,它连接到Question模型。...每一个包含外键关系的对象都会有这个绿色加号。点击它,会弹出一个新增Question的表单,类似Question自己的添加表单。...填入相关信息点击保存后,Django自动将该Question保存在数据库,并作为当前Choice的关联外键对象。通俗讲就是,新建一个Question并作为当前Choice的外键。...自定义管理站点首页 在类似的情况下,您可能想要定制Django管理首页页面。默认情况下,管理站点首页显示所有INSTALLED_APPS内并在admin应用中注册过的app,以字母顺序进行排序。
事务与锁的控制 这个比较难。由于数据库中的锁机制,我们开始在半夜发现事务超时错误。...外键索引(FK Indexes) 创建模型时,Django 会在所有外键上创建一个 B-Tree 索引,它的开销可能相当大,而且有时候并不很必要。...B-Tree 组合索引的经验法则是使二级索引尽可能小。换句话说,高基数(更明确的值)的列应该是在第一位的。 在我们的例子中,假设组少于用户(一般),所以把用户列放在第一位会使组的二级索引变小。...我们看看官网文档怎么说的: BRIN 设计用于处理非常大的表格,其中某些列与表格内的物理位置有一些自然的相关性。 要理解这个陈述,了解 BRIN 索引如何工作是很重要的。...回到文档: ...列与表格内的物理位置有一些自然的相关性 这是 BRIN 索引的关键。为了充分利用它,列中的值必须大致排序或聚集在磁盘上。
建立一对多的关系,外键字段建立在多的一方 publish=models.ForeignKey(to="Publish",to_field="nid") # 与Author表建立多对多的关系...myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称 2、id 字段是自动添加的 3、对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名...6、外键字段 ForeignKey 有一个 null=True 的设置(它允许外键接受空值 NULL),你可以赋给它空值 None 。...@163.com") 外键字段 ?...在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。例如: ?
orm相关的数据库查询优化 惰性查询 惰性查询指当我们只查数据库而不是用这些数据时,Django不会执行查询数据库的代码,目的是减少不必要的数据库操作,降低数据库的压力。...如: res = models.Book.objects.all()#只有当我们使用res时才会执行数据库查询的操作 all、only与defer all 拿到自己的所有的属性,但是没有与其他表建立外键的属性...select_related 括号内只能放一对一、一对多的外键字段,特点:内部自动连表操作,会将括号内外键字段所关联的表与当前表自动拼接成一张表,然后将表中的数据一个一个查询出来封装成一个一个的对象。...这样做的好处:跨表查询也不需要重复走数据库,减轻数据库压力。select_related()括号内放多个外键字段,逗号隔开,会将多个外键字段关联的表与当前表拼成一张大表。...,特点:按步骤查询多张表,然后将查询结果封装到对象中,给用户的感觉好像还是连表操作,括号内支持传多个外键字段,每放一个外键字段就会多走一条SQL语句,多查一张表。
Dept.objects.get(pk=10).emp_set.all() # 通过部门反查部门所有的员工 , , ]> 说明1:由于员工与部门之间存在多对一外键关联...db_constraint:是否为外键创建约束,默认值为True。...on_delete:外键关联的对象被删除时对应的动作,可取的值包括django.db.models中定义的: CASCADE:级联删除。...PROTECT:抛出ProtectedError异常,阻止删除引用的对象。 SET_NULL:把外键设置为null,当null属性被设置为True时才能这么做。...managed 设置为True时,Django在迁移中创建数据表并在执行flush管理命令时把表移除 order_with_respect_to 标记对象为可排序的 ordering 对象的默认排序 permissions
from django.db.models import Q 与& 或| 非~ 1.5聚合 聚合类: from django.db.models import Count, Sum,Avg,Max,Min...aggregate 1.6排序 默认是升序,如果想要降序,在查询字段前写减号。...order_by 1.7关联查询 1、查询和指定对象关联的数据(重点掌握) 由一查多:一对象.多类名小写__set.all() 由多查一:多对象.外键属性 2、通过模型类进行关联查询 查图书:一类.objects.get...|filter(多类名__字段__条件=值) 查英雄:多类.objects.filter(外键属性__字段__条件=值) 2.查询集 注意:对于queryset类的对象,可以继续调用之前的任何一个查询函数...团队开发注意事项 浅谈密码加密 Django框架中的英文单词 Django中数据库的相关操作
该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等 T:代表模板(Template),即表现层。...该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 V:代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。 ...它有一个或多个作者(和作者是多对多的关联关系[many-to-many]), 只有一个出版商(和出版商是一对多的关联关系[one-to-many],也被称作外 键[foreign key...默认地,管理工具使用`` 下拉框`` 来展现`` 外键`` 字段。但是,正如`` 多对多字段`` 那样,有时候你不想忍受因装载并显示这些选项而产生的大量开销。...解决这个问题的办法是使用`` raw_id_fields`` 选项。它是一个包含外键字段名称的元组,它包含的字段将被展现成`` 文本框`` ,而不再是`` 下拉框`` 。
一 创建模型 表和表之间的关系 一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束...建立一对多的关系,外键字段建立在多的一方,字段publish如果是外键字段,那么它自动是int类型 publish=models.ForeignKey(to="Publish",to_field...与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象) ForeignKey的db_contraint参数 关系和约束大家要搞清楚,我不加外键能不能表示两个表之间的关系啊,当然可以...但是我们就不能使用ORM外键相关的方法了,所以我们单纯的将外键换成一个其他字段类型,只是单纯的存着另外一个关联表的主键值是不能使用ORM外键方法的。...#db_constraint=False只加两者的关系,没有强制约束的效果,并且ORM外键相关的接口(方法)还能使用,所以如果将来公司让你建立外键,并且不能有强制的约束关系,那么就可以将这个参数改为False
在Django中具体的对应方式为: 类名对应数据库中的表名 类名对应数据库中的表名 类属性对应数据库里的字段 类实例对应数据库表里的一行数据 类实例对象的属性对应这行中的字段的值 一.数据库的连接 Django...Django官方文档https://docs.djangoproject.com/en/2.1/ref/models/fields/ 3.表与表之间的关联 1.外键 即一对多的关系 school=models.ForeignKey...直接设置外键的id 在student.objects.create中加 school_id=1 通过获取外键对象设置 obj = school.objects.get(name="school1")...使用’__’进行的查找 一对多 school_name为外键对象的字段 school为student表中设置的外键字段 student1=student.objects.filter(id=2).values...1)) 相当于用Q将条件封装,在Q对象之间使用&或者|或者~ 如果想将普通发关键字参数查询与Q查询一起使用,必须将关键字参数查询放到Q的后边 9.扩展查询extra Django 的查询语法难以简练地表达复杂的
) 注册方式二该方法是Django1.7的版本新增的功能: from django.contrib import admin from blog.models import Blog #Blog模型的管理器...#listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键) list_display = ('id', 'caption', 'author', 'publish_time...') #list_per_page设置每页显示多少条记录,默认是100条 list_per_page = 50 #ordering设置默认排序字段,负号表示降序排序...list_editable 设置默认可编辑字段 list_editable = ['machine_room_id', 'temperature'] #fk_fields 设置显示外键字段...过滤器如果是外键需要遵循这样的语法:本表字段__外键表要显示的字段。
3.cookie是基于域名安全的,浏览器在访问一个服务器的时候,只会把跟这个服务器相关的cookie发送过去。...class Meta: db_table = '' 定义外键属性: # 表中外键字段名格式: 外键属性_id> hbook = models.ForeignKey('BookInfo...()过滤器调用聚合函数 排序: 排序默认是升序,降序在排序字段前加- 使用order_by 关联查询: 1.查询和指定对象关联的数据 # 由1查多 一对象.多类名小写_set.all() 例:book.heroinfo_set.all...() # 由多查1 多对象.外键属性 例:hero.hbook 2.通过模型类进行关联查询 # 查图书(一) 一类.objects.get|filter(多类名__字段__条件=值) 例:books =...团队开发注意事项 浅谈密码加密 Django框架中的英文单词 Django中数据库的相关操作 DRF框架中的英文单词 重点内容回顾-DRF
order_with_respect_to Options.order_with_respect_to 按照给定的字段把这个对象标记为”可排序的“。这一属性通常用到关联对象上面,使它在父对象中有序。...例如,假设一个 Question 对象有很多相关联的Answer对象,返回的列表中含有相关联Answer对象的主键: >>> question = Question.objects.get(id=1)...>>> question.get_answer_order() [1, 2, 3] 与Question对象相关联的Answer对象的顺序,可以通过传入一格包含Answer 主键的列表来设置: >>> question.set_answer_order...([3, 1, 2]) 相关联的对象也有两个方法, get_next_in_order() 和get_previous_in_order(),用于按照合适的顺序访问它们。...你向ordering属性添加的每个字段都会产生你数据库的开销。你添加的每个外键也会隐式包含它的默认顺序。
views是业务逻辑层,在Django中充当着链接model与template的桥梁,处理模型并向template提交数据,同时也接受template的请求和参数,完成相应的逻辑后提交模型修改。...views.py里面是具体的逻辑函数,每一个函数对应着一个或多个模版,为了建立模版与视图的联系,还要有一定的路由机制,于是Django通常在根目录有一个路由程序urls.py。...当然这前提是views.py文件与urls.py在同一个文件夹里面否则就要引用home的命名空间。...同时Django也提供了外键设置接口,此处以book为例 class Book(models.Model): title = models.CharField(max_length = 100...调用代码也很简单,只需要在urls.py内激活admin的链接即可,配置文件在setting.py里,有需求的话可以自行改动。
因为Django在处理字符串相关的Field的时候,即使这个Field的null=False,如果你没有给这个Field传递任何值,那么Django也会使用一个空的字符串""来作为默认值存储进去。...外键和表关系 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。外键的存在使得ORM框架在处理表关系的时候异常的强大。...因此这里我们首先来介绍下外键在Django中的使用。 类定义为class ForeignKey(to,on_delete,**options)。...因此在底层,Django为Article表添加了一个属性名_id的字段(比如author的字段名称是author_id),这个字段是一个外键,记录着对应的作者的主键。...那么将会获取SET函数中的值来作为这个外键的值。SET函数可以接收一个可以调用的对象(比如函数或者方法),如果是可以调用的对象,那么会将这个对象调用后的结果作为值返回回去。
get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。...startswith,istartswith, endswith, iendswith date字段还可以: models.Class.objects.filter(first_day__year=2017) 外键关系常用操作...它存在于下面两种情况: 外键关系的反向查询 多对多关联关系 简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。...def prefetch_related(self, *lookups) 性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询在Python代码中实现连表操作。
重点内容回顾-DRF 1. on_delete on_delete是定义模型类中外键的一个选项。 on_delete选项指明的是主表删除数据的时候,对于外键引用的表数据如何处理。...在django.db.models中包含了可选的常量,常用的有三种: a.CASCADE级联,删除主表数据的时候,连同删除外键表中的数据。这个就有点狠了,按需求慎用。...b.PROTECT保护,通过抛出一个异常ProtectedError异常,来阻止删除主表中被外键引用的数据。...2. related_name related_name是在定义模型类时,外键的一个选项。它的功能下面慢慢给大家分析一下。...团队开发注意事项 浅谈密码加密 Django框架中的英文单词 Django中数据库的相关操作 DRF框架中的英文单词
然而,你有时候会想要获取从一组对象导出的值或者是聚合一组对象。这份指南描述了通过Django查询来生成和返回聚合值的方法。 整篇指南我们都将引用以下模型。这些模型用来记录多个网上书店的库存。...在聚合函式中指定聚合字段时,Django 允许你使用同样的 双下划线 表示关联关系,然后 Django 在就会处理要读取的关联表,并得到关联对象的聚合。...例如,我们可以查询所有出版商,并注上它们一共出了多少本书(注意我们如何用 ‘book’指定Publisher -> Book 的外键反转关系): >>> from django.db.models import...在第二个查询中,过滤器在注解之前,所以,在计算注解值时,过滤器就限制了参与运算的对象的范围。 order_by() 注解可以用来做为排序项。...与默认排序或order_by()交互 在查询集中的order_by() 部分(或是在模型中默认定义的排序项) 会在选择输出数据时被用到,即使这些字段没有在values() 调用中被指定。
每个成绩记录都关联到一个学生,通过 student 外键字段与学生表建立联系。3. 更新方法探讨在 Django 中,更新模型字段的方法有几种。...下面我们详细探讨这种更新方式:使用 attrs 方式更新外键字段在 Django 中,可以直接通过设置外键字段的方式来更新模型中的外键关联。...,而不需要查询和加载与学生对象相关联的所有信息。...然而,需要注意的是,update() 方法不支持直接更新外键关联的对象或外键字段。因此,在更新涉及外键字段的情况下,仍需要通过设置外键字段的方式来进行操作。...总结与实践建议在本教程中,我们深入探讨了如何使用 Django 更新模型字段,特别是处理外键字段更新的方法。
领取专属 10元无门槛券
手把手带您无忧上云