首页
学习
活动
专区
圈层
工具
发布

django-ForeignKey,OneToOneField,ManyToManyField

进入到django自带的related.py中,可以看到 1.ForeignKey 初始化的参数有: to, on_delete, related_name=None, related_query_name...models.Model): book = models.ForeignKey(to='Author',on_delete=models.CASCADE,to_field='id') to:被关联表的名称...on_delete:删除带有外键的信息时,定义了删除的操作: CASCADE:删除作者信息一并删除作者名下的所有书的信息; PROTECT:删除作者的信息时,采取保护机制,抛出错误:即不删除Books...的内容; SET_NULL:只有当null=True才将关联的内容置空; SET_DEFAULT:设置为默认值; SET( ):括号里可以是函数,设置为自己定义的东西; DO_NOTHING:字面的意思...,啥也不干,你删除你的干我毛线关系; to_field:被关联的字段,一般是主键,也可以是值唯一的字段 2.OneToOne 初始化参数有: to, on_delete, to_field=None,

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

    Django笔记(九)Django的ORM,查询数据的方法

    建表 需求(1) 需求(2) 总结 value()函数,获取列表 value()函数,获取元组 总结 建表 目前有两个表,一个用户表,一个用户类型表,一个用户对应一类型,但是一个类型下面有好多的用户...外键是在用户表里面 需求(1) 根据查询出来的用户,获取他的用户类型,这个就是多表查询,实现代码是 先查询出用户,直接根据外键字段获取他的用户类型 需求(2) 根据一个用户类型,查询他下面的所有的用户...其实有一个隐含的字段,写法是 总结 value()函数,获取列表 value()函数,获取元组 总结 以上方法 字典和元组是不可以跨表查询的 以下的写法是可以跨表的

    1.1K20

    django 模型关系

    多对一关系 多对多关系 一对一关系 多对一 django是使用django.db.models.ForeignKey 定义多对一关系 ForeignKey需要一个位置参数来指定本Model关联的Model...正向查询( ForeignKey 所在的模型查询关联的模型) car = Car.objects.get(pk=2) car.manufacturer #返回一条Manufacturer 对象 反向查询...默认情况下,这个管理器的名字为foo_set,其中foo 是源模型的小写名称。该管理器返回的查询集可以用上一节提到的方式进行过滤和操作。...clear() #从关联的对象集中删除所有的对象 多对多 要实现多对多,就要使用django.db.models.ManyToManyField类,和ForeignKey一样,它也有一个位置参数,用来指定和它关联的...(Group) 建议以被关联模型名称的复数形式做为 ManyToManyField 的名字 在哪个模型中设置 ManyToManyField 并不重要,在两个模型中任选一个即可——不要在两个模型中都设置

    1.8K30

    Django的ORM操作-查询数据

    数据库的查询需要使用管理器对象进行 通过mymodel.objects管理器方法调用查询对象 方法 说明 all() 查询全部记录,返回QuerySet查询对象 get() 查询符合条件的单一记录 filter...() 查询符合条件的多条记录 exclude() 查询符合条件外的全部记录 all()方法 ---- 使用方法:Asset.objects.all() from monitor.models import...,内部存放的是元组 会将查询出来的数据封装到元组中,在封装到查询集合QuerySet中 >>> a = Asset.objects.values_list("create_date") >>> a...("title").order_by('-price') >>> print(a.query) # 可以使用这种方式查看发送给MySQL的查询语句 filter() ---- 用法:Asset.objects.filter...="admin",system="Linux") for i in info: print("查询结果",i.create_date) 查询谓词 定义:做更灵活的条件查询时候需要使用查询谓词 每一个查询谓词是一个独立的查询功能

    1.1K20

    Django 模型查询2.3

    offset子句 注意:不支持负数索引 使用下标后返回一个新的查询集,不会立即执行查询 如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常...,[0:1].get()引发DoesNotExist异常 查询集的缓存 每个查询集都包含一个缓存来最小化对数据库的访问 在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中...,但是如果这部分不在缓存中,那么接下来查询返回的记录将不会被缓存,这意味着使用索引来限制查询集将不会填充缓存,如果这部分数据已经被缓存,则直接使用缓存中的数据 字段查询 实现where子名,作为方法filter...')) django支持对F()对象使用算数运算 list.filter(bread__gte=F('bcommet') * 2) F()对象中还可以写作“模型类__列名”进行关联查询 list.filter...,会合并为And进行 需要进行or查询,使用Q()对象 Q对象(django.db.models.Q)用于封装一组关键字参数,这些关键字参数与“比较运算符”中的相同 from django.db.models

    2.8K20

    八、Django分组查询

    分组查询、F查询和Q查询 分组查询 统计每个出版社出版的书籍的平均价格 第一种方式 obj = models.Book.objects.values('publishs_id').annotate(...5,decimal_places=2) #decimal(16,2) publishs=models.ForeignKey(to="Publish") authors=models.ManyToManyField...当一个操作符在两个Q 对象上使用时,它产生一个新的Q 对象。 你可以组合& 和| 操作符以及使用括号进行分组来编写任意复杂的Q 对象。...同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询: bookList=Book.objects.filter(Q(authors__name="yuan") & ~Q(publishDate...所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。

    81110

    第 03 篇:创建 Django 博客的数据库模型

    # 而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 # ManyToManyField,表明这是多对多的关联关系。...而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 ManyToManyField,表明这是多对多的关联关系。...当要查询文章属于哪一个分类时,只需要查看其对应的分类 ID 是多少,然后根据这个分类 ID 就可以从分类数据库表中找到该分类的数据。...反之,要查询某个分类下有哪些文章,只需要查看对应该分类 ID 的文章有哪些即可。...详细示例[3]•django ManyToManyField 简介[4]•django ManyToManyField 详细示例[5] References [1] 关于字段类型的介绍: https:/

    80740

    django 1.8 官方文档翻译:2-1-1 模型语法

    Django 提供一套自动生成的用于数据库访问的API;详见执行查询。...中介模型有一些限制: 中介模型必须有且只有一个外键到源模型(上面例子中的Group),或者你必须使用ManyToManyField.through_fields 显式指定Django 应该使用的外键。...由于Django 查询语法的工作方式,字段名称中连续的下划线不能超过一个。...SQL 的保留字例如join、where 和select,可以用作模型的字段名,因为Django 会对底层的SQL 查询语句中的数据库表名和列名进行转义。 它根据你的数据库引擎使用不同的引用语法。...查询集始终返回请求的模型 也就是说,没有办法让DJango在查询Person对象时返回MyPerson对象。Person 对象的查询集会返回相同类型的对象。

    5.6K20

    Django 系列博客(十三)

    to 设置要关联的表 to_field 设置要关联的表的字段 related_name 反向查询时,使用的字段名,用于代替原反向查询时的'表名_set'。...to 设置要关联的表 related_name 反向查询时,使用的字段名,用于代替原反向查询时的'表名_set'。 symmetrical 仅用于多对多自关联时,指定内部是否创建反向操作的字段。...("self", symmetrical=False) 此时,person 对象可以使用 person_set 属性进行反向查询。...through 在使用 ManyToManyField 字段时,Django 将自动生成一张表来管理多对多的关联关系。...这样创建的第三张表无法使用 set、add、remove、clear方法来管理对多多关系,需要通过第三张表来进行增、删、改,查询一样。

    1.5K30

    创建 Django 博客的数据库模型

    # 而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 ManyToManyField,表明这是多对多的关联关系。...而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 ManyToManyField,表明这是多对多的关联关系。...当要查询文章属于哪一个分类时,只需要查看其对应的分类 ID 是多少,然后根据这个分类 ID 就可以从分类数据库表中找到该分类的数据。...反之,要查询某个分类下有哪些文章,只需要查看对应该分类 ID 的文章有哪些即可。...Django ManyToManyField 简介 Django ManyToManyField 详细示例 总结 本章节的代码位于:Step3: blog models。

    1.7K60

    Django模型关系:从一对多到多对多全解析

    ()获取作者的所有书籍from django.db import modelsclass Author(models.Model): first_name = models.CharField(max_length...(",")).update( read_status=True, read_time=timezone.now())四、关于是否使用外键约束在实际项目中,是否使用数据库外键约束需要权衡利弊使用外键的优势数据完整性...:数据库级别的约束保证关联数据一致性开发效率:ORM 自动处理关联查询和级联操作查询便捷:支持select_related等优化方法,简化多表查询禁用外键的场景高并发系统:外键会增加数据库锁竞争,影响写入性能分布式架构...:分库分表环境下,跨库外键无法生效复杂迁移:避免循环依赖导致的迁移失败问题折中方案:使用db_constraint=False 参数数据库层面:无外键约束,数据库不会强制校验关联数据的存在性Django...《Django从入门到实战》专栏!

    15400

    如何检查列表中的某个帖子是否被当前用户投票

    在 Django 项目中,如果需要检查一个列表中的某个帖子是否被当前用户投票(比如点赞或踩),可以通过数据库查询实现。...以下是具体的实现方法,假设你使用的是 Django 并有如下的数据库模型结构:问题背景我正在创建一个reddit克隆,其中存在一个问题,我正在寻找一种方法来指示当前用户是否对某个特定问题进行过投票,而不会产生过多数据库请求...:from django.shortcuts import get_object_or_404, renderfrom community.models import Thread, Commentfrom...django.http import HttpResponse​​def detail(request, thread_id): thread = get_object_or_404(Thread...{% endif %} {% endrecursetree %} {% endblock content %}2、通过数据库查询

    2K00
    领券