首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django之ForeignKey和ManyToManyField多表查询

只有在db_constraint=True时Django model才会在数据库上建立外键约束, 在该值为False时不建立约束. 默认db_constraint=True....,如Entry.blog作为Blog的外键,默认情况下Blog.entry_set是包含所有参照Blog的Entry示例的查询集,可以使用查询集API取出相应的实例。...ManyToManyField.through_fields 上文示例中Membership 有两个外键指向Person (person 和inviter),这使得关联关系含混不清并让Django 不知道使用哪一个...在这种情况下,必须使用through_fields 明确指定Django 应该使用哪些外键 through_fields 接收一个二元组('field1', 'field2'),其中field1 为指向定义...ManyToManyField 字段的模型的外键名称(本例中为group),field2 为指向目标模型的外键的名称(本例中为person).

1.8K10

Django model 层之Models与Mysql数据库小结

FilePathField 一个CharField,可取值限制于系统上某个目录中的文件名 更多详情参考官方文档。 FloatField python float实例表示的浮点数。...删除被参照表的某条表记录,同时级联删除参照表中,同待删除记录存在外键关联关系的记录。 PROTECT 删除被参照表中的某条表记录,如果参照表中,存在与该记录有外键关系的记录,则不让删除。...SET_NULL 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外键关联的记录的外键列值为null。当且仅当设置了null=True选项时可用。...SET_DEFAULT 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外键关联的记录的外键列值为默认值。必须为外键列设置默认值。...SET() 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外键关联关系的记录的外键列值为传递给SET()的参数值,如果传递给SET()的参数值是可调用对象,则设置为调用可调用对象获取的结果。

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django之ORM

    在Django中具体的对应方式为: 类名对应数据库中的表名 类名对应数据库中的表名 类属性对应数据库里的字段 类实例对应数据库表里的一行数据 类实例对象的属性对应这行中的字段的值 一.数据库的连接 Django...表示多对多的关系。 除了这种方式也可以手动创建一个表,手动添加两个外键来实现多对多。...QuerySet对象的使用是有cache缓存的,即遍历第二次QuerySet对象的时候数据是从缓存中拿的,不会执行SQL语句 如果QuerySet对象数据量特别大,遍历时为了避免占用大量cache空间,...使用’__’进行的查找 一对多 school_name为外键对象的字段 school为student表中设置的外键字段 student1=student.objects.filter(id=2).values...表示以cs结尾的 name__istartswith 不区分大小写 name__iendswith 不区分大小写 等等 5.聚合查询aggregate 聚合查询是对QuerySet对象进行计算得到一个结果值作为字典中的值放到一个字典中

    1.1K30

    关于“Python”的核心知识点整理大全59

    下面来修改模型Topic,在其中添加一个关联到用户的外键。这样做后,我们必须对数据库 进行迁移。最后,我们必须对有些视图进行修改,使其只显示与当前登录的用户相关联的数据。 1....中添加了字段owner,它建 立到模型User的外键关系。...最简单的办法是,将既有主题都 关联到同一个用户,如超级用户。为此,我们需要知道该用户的ID。 下面来查看已创建的所有用户的ID。...正如你看到的,现在每个主题都属于用户ll_admin。 注意 你可以重置数据库而不是迁移它,但如果这样做,既有的数据都将丢失。一种不错的做 法是,学习如何在迁移数据库的同时确保用户数据的完整性。...代码 Topic.objects.filter(owner=request.user)让Django只从数据库中获取owner属性为当前用户的 Topic对象。

    14410

    day67-Django进阶-ORM操作数据库+django环境搬运

    image.png 13.多对多 + 一对多 add() 一对多 # 将 QuerySet 里的所有对象外键全部强行指向当前查询对象 books = models.Book.objects.filter...) add() 多对多 # 将 QuerySet 里面的对象保留已有外键,新增指向自己的外键 # add 需要打散 books = models.Book.objects.filter(id__gte=...(id=3).book_set.set(books, ) remove() + clear() 可以使用的前提是 ForeignKey(null=True...)...,即外键指向可以为空 remove() 一对多,多对多都一样 # 接收QuerySst,先筛选出符合条件的要删除的对象 # 打散出入对象,并不解除所有,只解除筛选出的对象 books = models.Book.objects.filter...,多对多都一样 # 直接简单暴力清除所有跟查询对象相关的外键关联 models.Publisher.objects.get(id=2).book_set.clear()

    55900

    前端系列11集-ES6 知识总结

    首先遍历所有数值键,按数值升序排列其次遍历所有字符串键,按加入时间升序排列最后遍历所有 Symbol 键,按加入时间升序排列 super 关键字 指向当前对象的原型对象,只能用在对象的方法之中使用 扩展运算符...Proxy 代理的情况下,目标对象内部的 this 会指向 Proxy 代理 this 问题 在 Proxy 代理的情况下,目标对象内部的 this 会指向 Proxy 代理 函数 参数支持默认值 rest...操作都变成函数行为 静态方法 数值 二进制和八进制表示法 二进制用前缀 0b 或 0B 表示 八进制用前缀 0o 或 0O 表示 数值分隔符 使用下划线 _ 作为分隔符,没有指定间隔的位数 注意点...(value) 添加某个值返回 Set 实例本身 Set.prototype.delete(value) 删除某个值返回一个布尔值表示删除是否成功 Set.prototype.has(value...) 返回一个布尔值表示该值是否为 Set 的成员 Set.prototype.clear() 清除所有成员没有返回值 遍历方法遍历顺序为插入顺序 Set.prototype.keys

    17620

    06.Django基础五之django模型层(二)多表操作

    =models.CASCADE) #foreignkey里面可以加很多的参数,都是需要咱们学习的,慢慢来,to指向表,to_field指向你关联的字段,不写这个,默认会自动关联主键字段,on_delete...注意事项: 表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的 对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名...与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象) ForeignKey的db_contraint参数 关系和约束大家要搞清楚,我不加外键能不能表示两个表之间的关系啊,当然可以...但是我们就不能使用ORM外键相关的方法了,所以我们单纯的将外键换成一个其他字段类型,只是单纯的存着另外一个关联表的主键值是不能使用ORM外键方法的。...#db_constraint=False只加两者的关系,没有强制约束的效果,并且ORM外键相关的接口(方法)还能使用,所以如果将来公司让你建立外键,并且不能有强制的约束关系,那么就可以将这个参数改为False

    2.7K20

    Django 模型层之多表操作

    Author) def __str__(self): return self.name 注意事项: 1.id字段不写的话会自动添加 2.对于外键字段,Django会在字段名上添加..."_id"来创建数据库中的列名 3.外键字段ForeignKey有一个null=True的设置,你可以赋给它空值None 二.添加表记录 一对一: # 方式一: detail_obj = models.AuthorDetail.objects.filter...[yven,hwt]) book.authors.add(yven,hwt) #多对多关系其他常用API: # 将某个特定的对象从被关联对象集合中去除,可以传递对象,可以传递id,也可以传递*列表如:...所有Django为我们提供了F表达式来完成这类操作 导入包: from django.db.models import F 如:查询comment_num数量大于read_num的书籍 models.Book.objects.filter...'AND'的,如果需要执行复杂的查询,就需要使用Q对象 导入包:from django.db.models import Q 可以使用"&"或者"|"或者"~"来组合Q对象,分别表示与,或,非逻辑 如:

    1.3K20

    Django学习笔记之Queryset详解

    ,通过自定义model的instance可以获取外键实体等,它的方法都是记录级方法(都是实例方法,貌似无类方法),不要在里面定义类方法,比如计算记录的总数,查看所有记录,这些应该放在自定义的manager...先filter,然后对得到的QuerySet执行delete()方法就行了,它会同时删除关联它的那些记录,比如我删除记录表1中的A记录,表2中的B记录中有A的外键,那同时也会删除B记录,那ManyToMany...'Beatles Blog') #限定外键表的字段 #下面是反向连接,不过要注意,这里不是entry_set,entry_set是Blog instance的一个属性,代表某个Blog object...fields passed to select_related(),QuerySet中的元素中的OneToOne关联及外键对应的是都是关联表的一条记录,如my_entry=Entry.objects.get...代码2中,当遍历开始前,先拿到Entry的QuerySet,并且也拿到这个QuerySet的每个object中的blog对象,这样遍历过程中,就不用再查询数据库了,这样就减少了数据库读次数。

    2.7K30

    Django 3.1 官网学习路线

    字段还可以有各种可选参数;在本例中,我们将投票的默认值设置为 0。 最后,请注意使用外键定义了关系。这告诉 Django 每个选择都与一个问题相关。...按照惯例,Django 会将"_id"附加到外键字段名。(是的,你也可以重写这个。) 外键关系是通过外键约束来显式的。...不要担心可延期的部分;它告诉 PostgreSQL 在事务结束之前不要强制执行外键。...__str__()方法非常重要,这不仅是为了方便您在处理交互式提示时使用,而且因为在 Django 的自动生成的管理员中都使用了对象的表示形式。...“添加选择”表单如下所示: 在该表单中,“Question”字段是一个选择框,包含数据库中的每个问题。Django 知道一个外键应该在管理中表示为一个框。在我们的例子中,目前只存在一个问题。

    8.2K10

    【16】进大厂必须掌握的面试题-100个python面试

    set()–此函数在转换为set后返回类型。 list()– 此函数用于将任何数据类型转换为列表类型。 dict()– 此函数用于将顺序(键,值)的元组转换为字典。...回答:迭代器是可以遍历或迭代的对象。 Q24。如何在Python中生成随机数? 回答: 随机模块是用于生成随机数的标准模块。...回答: 创建新实例类型时,将使用浅表副本,并且它将复制的值保留在新实例中。浅复制用于复制参考指针,就像复制值一样。这些引用指向原始对象,并且在类的任何成员中所做的更改也会影响其原始副本。...浅拷贝允许更快地执行程序,并且取决于所使用的数据大小。 深度复制用于存储已复制的值。深层复制不会将引用指针复制到对象。它引用一个对象,并存储其他对象指向的新对象。...答: 在理想情况下,NumPy除了数组数据类型和最基本的操作外,将不包含任何内容:索引,排序,重塑,基本的元素函数等。 所有数字代码都将驻留在SciPy中。

    16.4K30

    Django——model基础

    myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   2、id 字段是自动添加的 3、对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名...6、外键字段 ForeignKey 有一个 null=True 的设置(它允许外键接受空值 NULL),你可以赋给它空值 None 。...()  # 与人民出版社关联的所有书籍对象集合 基于双下划线的跨表查询  Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系。...(例如,遍历 QuerySet,在每个对象上调用 delete()方法),而不是使用 QuerySet 中的 delete()方法。...在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。例如: ?

    1.1K100

    Django框架学习(三)

    {% extends "父模板路径"%} 子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值。 填充父模板中指定名称的预留区域。...%} # 遍历为空时的逻辑 {% endfor %} # Django模板中for循环 {% for ... in ... %} # 遍历不为空时的数据 # 获取for循环遍历到了第几次...AutoField的选项使用 unique 如果为True, 这个字段在表中必须有唯一值,默认值是False 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理...,在django.db.models中包含了可选常量: CASCADE 级联,删除主表数据时连通一起删除外键表中数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据...的子应用会默认为我们创建一些表, 4.4演示工具使用 4.4.1shell工具 Django的manage工具提供了shell命令,帮助我们配置好当前工程的运行环境(如连接好数据库等),以便可以直接在终端中执行测试

    1.8K40

    Java|Map、List与Set的区别

    集合中的对象不按特定的方式排序,并且没有重复对象。...所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。 HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显着提高性能。...WeakHashMao :弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。...3、在除需要排序时使用TreeSet、TreeMap外,都应使用HashSet、HashMap,因为他们的效率更高。...注意: 1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。 2、Set和Collection拥有一模一样的接口。

    2.8K130

    Django项目知识点(三)

    默认值为True,如果你不希望这么做,可以把manage的值设置为False order_with_respect_to 这个选项一般用于多对多的关系中,它指向一个关联对象,就是说关联对象找到这个对象后它是经过排序的...指定这个属性后你会得到一个get_xxx_order()和set_xxx_order()的方法,通过它们你可以设置或者回去排序的对象 ordering 这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的...,也可另立主键并将“一”和“多”两表的主键作为关联表的外键; 多对多的表,则必须设中间关联表,关联表设独立主键,并引入两个“多”头的表的主键作为关联表的外键。...SET_NULL:此值设置,会把外键设置为null,前提是允许为null。 SET_DEFAULT:此值设置,会把设置为外键的默认值。 SET():此值设置,会调用外面的值,可以是一个函数。...一般使用CASCADE 表示级联删除 也就是有一个数据其中一个表删了,管聊的表就会删除,想下如果有个学生不读了,删掉了所有学生报名表中的数据,它绑的外键的学生,课程,是不是先把它删了,这就是级联删除,如果设置了

    1.9K30

    django 字段类型_access的数据库类型是

    默认情况下,BinaryField设置editable为False,在这种情况下,他不能包含在ModelForm中,在django2.1中进行了修改:旧版本不允许设置editable为True。...例如:如果有一个可为空的字段,并且在删除引用的对象时将其设置为空,如 user = models.ForeignKey( ​ User, ​ models.SET_NULL, ​...Django会在DELETE CASCADE上模拟 SQL约束的行为,并删除包含ForeignKey的对象。 **DO_NOTHING:**不采取行动。...SET_NULL:删除时把外键置为null,当null=True时才可以使用。 SET_DEFAULT:把外键置为默认值,必须要设置默认值时才可以使用。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    3.9K30

    pyntho经典面试题

    一定是在列表的右边,反之,则3在列表的左边,比如它比3小,则下次就可以只比较[middle+1, end]的数,继续使用二分法,将它一分为二,直到找到3这个数返回或者列表全部遍历完成(3不在列表中) ...122.索引在什么情况下遵循最左前缀的规则? 联合索引 123.主键和外键的区别? 主键是能确定一条记录的唯一标示。...例如,身份证证号 外键:用于与另一张表的关联,是能确定另一张表记录的字段,用于保持数据的一致性 主键 外键 定义 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一张表的主键,外键可以有重复的...Q:用来进行复杂查询     Q查询可以组合使用 “&”, “|” 操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象,   Q对象可以用 “~” 操作符放在前面表示否定,也可允许否定与不否定形式的组合...SET_NULL:此值设置,会把外键设置为null,前提是允许为null。 SET_DEFAULT:此值设置,会把设置为外键的默认值。 SET():此值设置,会调用外面的值,可以是一个函数。

    3.1K12

    60道硬核 Python 面试题,论面霸是如何炼成的

    在Python中如何使用多进制数字? 我们在Python中,除十进制外还可以使用二进制、八进制和十六进制。 a. 二进制数字由0和1组成,我们使用 0b 或 0B 前缀表示二进制数。...怎样获取字典中所有键的列表?...无论哪种方式,在您的(空)数据库到位的情况下,剩下的就是告诉Django如何使用它。这是项目的settings.py文件的来源。...什么是Python中的map函数? Map函数执行作为第一个参数给出的函数,该函数遍历第二个参数给出的迭代的所有元素的。如果给定的函数包含多于1个参数,则给出了许多迭代。 37....字典是一组键(key)和值(value)的组合, 通过键(key)进行查找, 没有顺序, 使用大括号"{}"; set: 集合,无序, 元素只出现一次, 自动去重, 使用"set([])"; 应用场景:

    2K70
    领券