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

如何在django中实现基于forgen键集的反向查询

在Django中实现基于ForeignKey的反向查询,可以通过使用related_name属性来定义反向查询的名称。

  1. 首先,在定义ForeignKey字段时,给它设置一个related_name属性,这将是反向查询的名称。例如:
代码语言:txt
复制
class ModelA(models.Model):
    pass

class ModelB(models.Model):
    model_a = models.ForeignKey(ModelA, related_name='model_bs')

在上面的代码中,通过将related_name设置为'model_bs',我们定义了ModelB对象对应的所有ModelA对象的反向查询名称。

  1. 接下来,通过使用反向查询名称,可以在ModelA对象中访问与之相关联的ModelB对象。例如:
代码语言:txt
复制
model_a = ModelA.objects.first()
related_model_bs = model_a.model_bs.all()

在上面的代码中,我们使用反向查询名称'model_bs'来获取与给定的ModelA对象相关联的所有ModelB对象。

这样,就可以在Django中实现基于ForeignKey的反向查询。这种方法适用于各种应用场景,例如获取一个用户的所有评论、获取一篇文章的所有标签等。

腾讯云相关产品和产品介绍链接地址: 腾讯云提供了云服务产品,其中包括云服务器、云数据库、云存储、人工智能等。您可以访问腾讯云官方网站,了解更多关于腾讯云的产品和服务:腾讯云官网

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Django 模型层之多表操作

    来创建数据库列名 3.外字段ForeignKey有一个null=True设置,你可以赋给它空值None 二.添加表记录 一对一: # 方式一: detail_obj = models.AuthorDetail.objects.filter...传递参数必须是可迭代对象,一般为列表,列表内可以是对象,也可以是id book.authors.set() 三.基于对象跨表查询 一对一查询 正向查询(按字段:authordetail) # 查询作者姓名为...所有Django为我们提供了F表达式来完成这类操作 导入包: from django.db.models import F :查询comment_num数量大于read_num书籍 models.Book.objects.filter...:将read_num数量乘以二 models.Book.objects.all().update(read_num=F('read_num')*2) Q查询 filter()等方法种关键字参数查询都是通过逗号来实现...'AND',如果需要执行复杂查询,就需要使用Q对象 导入包:from django.db.models import Q 可以使用"&"或者"|"或者"~"来组合Q对象,分别表示与,或,非逻辑 :

    1.3K20

    Django之Model操作数据库详解

    ,使用字段名,用于代替 【表名_set】 : obj.表名_set.all() related_query_name=None, # 反向操作时,使用连接前缀,用于替换【表名...=None, # 反向操作时,使用连接前缀,用于替换【表名】 : models.UserGroup.objects.filter(表名__字段名=1).values('表名__字段名'...根据日期获取查询 datetimes() 根据时间获取查询 none() 创建空查询 union() 并 intersection...Q查询 F查询专门取对象某列值操作,F作用:用来批量修改数据 #导入F from django.db.models import F #把table1表num列每一个值在基础上加10...__gt=4 九、实例 1、DjangoORM如何判断查询结果是否为空,判断djangoorm为空 result= Booking.objects.filter() 方法一 .exists()

    7K10

    Django之ORM

    Django具体对应方式为: 类名对应数据库表名 类名对应数据库表名 类属性对应数据库里字段 类实例对应数据库表里一行数据 类实例对象属性对应这行字段值 一.数据库连接 Django...表示多对多关系。 除了这种方式也可以手动创建一个表,手动添加两个外实现多对多。...2.删除 1.删除普通表信息 先找到,再删除 student1=student.objects.filter(id=1)[0].delete() 由于django级联删除,其他表student_teacher...field): 对查询结果排序 reverse(): 对查询结果反向排序 distinct(): 从返回结果剔除重复纪录 values_list(*field): 它与values()非常相似,它返回是一个元组序列...2.QuerySet对象 查询结果就是一个QuerySet对象 QuerySet对象就像是一个列表,列表存储着查询结果,可以迭代,可以切片 DjangoQuerySet对象是惰性,即你得到这个对象时候并没有真正在数据库执行

    1.1K30

    Django ORM 多表操作

    (ManyToManyField):在第三张关系表中新增数据 ORM 修改数据 ORM 删除和清空数据 跨表查询 基于对象跨表查询 基于双下划线跨表查询 聚合查询 示例 F查询 Q查询 Django...ORM 多表操作 表模型 图书表 出版社表 作者表 作者详情表 表关系 一对一:一对一推荐建在查询频率高一方 一对多:外字段建在多一方 多对多:外字段建在查询频率多一方,在Django第三张表不需要创建...(常用) 一对多,设置外属性类(多表),MySQL 显示字段名是:外属性名_id。...,就是正向 反向:从没有外表去查另外相关联表,就是反向 口诀: 正向查询按外字段 反向查询按表名小写 注意: 正向:属性名 反向:小写类名加 _set 反向查询时候查询对象可能有多个情况加_..._set,查询对象只有一个情况不需要加 基于对象跨表查询 '''子查询思路''' 1、先查出一个对象 2、基于对象正反查 '''基于对象跨表查询:正向''' 1.查询三国演义书籍对应出版社名称

    1.8K20

    Django学习笔记之Queryset详解

    可以使用双下划线对OneToOne、OneToMany、ManyToMany进行关联查询反向关联查询,而且方法都是一样: >>> Entry.objects.filter(blog__name=...OneToOne关系也是这样关联查询,可以看到,Django对OneToOne、OneToMany、ManyToMany关联查询及其反向关联查询提供了相同方式,真是牛逼啊。...实现 在SQL,很多关键词在删、改、查时都是可以用order by、 like、in、join、union、and、or、not等等,我们以查询为例,说一下django如何映射SQL这些关键字...聚合函数可以像filter那样关联表,即在聚合函数Django对OneToOne、OneToMany、ManyToMany关联查询及其反向关联提供了相同方式,见下面例子。...fields passed to select_related(),QuerySet元素OneToOne关联及外对应是都是关联表一条记录,my_entry=Entry.objects.get

    2.7K30

    Django之路由层

    一、Django实现表与表关联 以图书管理系统为例我们在数据库建立四张表:图书表、出版社表、作者表、作者信息,这里表与标的对应关系如下: 表 表 对应关系 出版社 图书 一对多 作者 图书 多对多 作者信息...外字段建在任意一方都可以,但是建议建在查询频率较高那一方 author_detail = models.OneToOneField(to='Author_detail') # fk +...,建议建在查询频率高一方 一对多外字段创建时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id 多对多关系,django orm会自动帮我们创建书籍和作者第三张关系表...3.9Django1.x和2.x版本路由层区别 1.Django2.x默认url通过path接收,path第一个输入值不是正则表达式,里面写是什么就按什么匹配。...urlpatterns = [ path('admin/', admin.site.urls), ] 2.Django2.xre_path对应Django1.xurl功能相同。

    1.3K21

    Django】 开发:数据库操作和后台管理

    删除单个MyModel对象或删除一个查询结果(QuerySet)全部对象都是调用 delete()方法 删除单个对象 步骤 查找查询结果对应一个数据对象 调用这个数据对象 delete ()...方法实现删除 示例: try: auth = Author.objects.get(id=1) auth.delete() except: print(删除失败) 删除查询结果...') print(wife.name, '老公是', wife.author.name) 反向查询 通过反向关联属性查询 反向关联属性为实例对象.引用类名(小写),作家反向引用为作家对象.wife...出版社是:', abook.publisher.name) 通过 Publisher 查询 对应所有的 Book 【反向Django会在Publisher增加一个属性来表示对对应Book们查询引用...获取book对应作者中年龄大于80岁作者信息 通过 Author 查询对应所有的 Book【反向Django 会生成一个反向属性 book_set 用于表示对对应 book 查询对象相关操作

    4.1K40

    Python全栈开发之Django基础

    对象关系映射,是随着面向对象思想发展而产生,是一种程序技术,用于实现面向对象编程语言里不同类型系统数据之间转换,面向对象是从软件工程基本原则(耦合、聚合、封装)基础上发展起来,而关系数据库则是从数学理论发展而来...() 查询 查询表示从数据库查询对象集合 返回查询过滤器 all():返回所有数据 filter(): 返回满足条件数据 exclude(): 返回不满足条件数据 order_by()...): 返回当前查询结果总条数 aggregate(): 聚合,返回一个字典 判断一个查询集中是否有数据 两个特性 惰性 创建查询不会访问数据库,直到调用数据时,才会访问数据库 缓存 使用同一个结果...,第一次使用会触发查询数据库,然后将结果缓存下载,再次使用直接调用缓存 限制结果 可以对结果进行切片操作,等同于数据库分页操作,但是不支持负数 list = BookInfo.objects.all...() 清除session数据,在存储删除session整条数据 request.session.flush() 删除session指定及值,在存储只删除某个及对应值 del request.session

    3.8K20

    Django学习笔记之ORM多表操作

    注意事项:  表名称myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   id 字段是自动添加  对于外字段,Django 会在字段名上添加"_id" 来创建数据库列名... 这个例子CREATE TABLE SQL 语句使用PostgreSQL 语法格式,要注意Django 会根据settings 中指定数据库类型来使用相应SQL 语句。  ...定义好模型之后,你需要告诉Django _使用_这些模型。你要做就是修改配置文件INSTALL_APPSZ设置,在其中添加models.py所在应用名称。...基于双下划线跨表查询  Django 还提供了一种直观而高效方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系。...如果我们要对两个字段值做比较,那该怎么做呢? Django 提供 F() 来做这样比较。F() 实例可以在查询引用字段,来比较同一个 model 实例两个不同字段值。

    2.8K40

    DjangoORM操作

    1、无需连表查询性能低,省硬盘空间(选项不固定时用外) 2、在modle文件里不能动态增加(选项一成不变用Djangochoice) 其他字段 db_index = True 表示设置索引 unique...(查询结果对象),它并不会马上执行sql,而是当调用QuerySet时候才执行。...orm时候,我们可以把一对多,多对多,分为正向和反向查找两种方式。...正向查找:ForeignKey在 UserInfo表,如果从UserInfo表开始向其他表进行查询,这个就是正向操作,反之如果从UserType表去查询其他表这个就是反向操作。...('UserType') 到B表(注意外表名加引号) 就意味着 写在写A表B表主键,(一列),代表B表多个(一行)称为1对多, 查询 总结:利用orm获取 数据库表多个数据 获取到数据类型本质上都是

    4.8K10

    Django基表创建、外字段属性简介、脏数据概念、子序列化

    通过逻辑将A、B表进行连表查询,不会有任何异常。两张表建立了一对一外字段,外在A表,那么先往B表写数据就更合理。...更合理) """ Django orm中外字段属性详解 在建表之前我们对外字段属性进行了解: 1)related_name在外设置外反向查询字段名:正向找字段名,反向找related_name...值,related_name默认值是表名小写 + _set,这就是为什么在Django跨表反向查询时我们使用表名小写 + _set去查另一张表数据。...,将两张表设置为级联,并将外反向查询字段名设置为detail 数据库脏数据介绍 数据库中常见并发操作所带来了一致性问题包括:丢失修改,不可重复读,读“脏”数据,幻读。...子序列化 Django子序列化功能是:通过跨表查询数据然后对跨表查到数据反序列化。

    4.3K30

    【Python全栈100天学习笔记】Day41 Django深入理解框架

    深入模型 在上一个章节,我们提到了Django基于MVC架构Web框架,MVC架构追求是“模型”和“视图”解耦合。所谓“模型”说得更直白一些就是数据(表示),所以通常也被称作“数据模型”。...,所以也能通过部门反向查询该部门员工(从一对多关系“一”一方查询“多”一方),反向查询属性默认名字是类名小写_set(如上面例子emp_set),当然也可以在创建模型时通过ForeingKey...related_name属性指定反向查询属性名字。...:基于like模糊查询 in:集合运算 gt / gte / lt / lte:大于/大于等于/小于/小于等于关系运算 range:指定范围查询(SQLbetween…and…) year / month.../ iregex:基于正则表达式模糊匹配查询 Q对象(用于执行复杂查询使用: >>> from django.db.models import Q >>> Emp.objects.filter(

    2.3K30

    后端框架学习-Django

    使用 Django,只要很少代码,Python 程序开发人员就可以轻松地完成一个正式网站所需要大部分内容,并进一步开发出全功能 Web 服务 Django 本身基于 MVC 模型,即 Model...字典 分组聚合 其实是为了实现Having语句 通过计算查询结果每一个对象所关联对象集合,从而得出总计值,为查询每一项生成聚合 QuerySet.annotate(结果变量名(别名)=聚合函数...)) wife = Wife.objects.create(name=’王夫人’,author_id = 1(类属性字段绑值)) 一对一查询 正向查询:从外查对象 反向查询:从对象查外 调用反向属性查询到关联一方...一对多查询 核心:正向属性(authors)和反向属性(book_set) 在多表上设置外,关联一表。...核心:正向属性(authors)和反向属性(book_set) mysql多对多需要用三张表实现 Django无需手动创建第三张表,Django自动完成 创建字段语法:属性 = models.ManyToManyField

    9.4K40

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

    related_query_name 反向查询操作时,使用连接前缀,用于替换表名。 on_delete 当删除关联表数据时,当前表与其关联行为。...注意事项: 表名称myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   id 字段是自动添加 对于外字段,Django 会在字段名上添加"_id" 来创建数据库列名...三 基于对象跨表查询 跨表查询是分组查询基础,F和Q查询是最简单,所以认真学习跨表查询 一对多查询(Publish 与 Book) ?     ...四 基于双下划线跨表查询基于join实现Django 还提供了一种直观而高效方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系。...''' 基于双下划线查询就一句话:正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表,一对一、一对多、多对多都是一个写法,注意,我们写orm查询时候,哪个表在前哪个表在后都没问题

    2.7K20

    Django关系映射

    ="0dbccd1992474d30a4497b05295e807b") # 关联UserMit表user_id对应主键 一对一(查询数据) ---- 正向查询 正向查询:直接通过外属性查询,则为外查询...') 反向查询 没有外属性一方,可以调用反向属性查询到关联另一方 反向关联属性为实例对象.引用类名(小写) 当反向引用不存在时候,则会触发异常 当UserId类定义了外约束...,"班级是",stu.classroom.name) XiaoMing 班级是 高二三班 反向查询[通过ClassRoom查询所有Student] class1 = ClassRoom.objects.get...: print(i.id,i.student_name,i.classroom_id) 多对多映射 ---- 多对多表达对象之间多对多复杂关系,:每个人都有不同学校,每个学校都有不同学生...MySQL创建多对多需要以来第三张表来完成 Django无需手动创建,Django自动完成 语法:在关联两个类任意一个类models.ManyToManyField(MyModel

    1.7K20

    Python进阶29-ORM介绍

    添加表记录 基于对象连表查询 一对一查询 一对多查询 多对多查询 连续跨表 打印Django查询数据SQL语句 基于双下划线查询 聚合查询 分组查询 F查询...2.peewee ##优点: 1.DjangoAPI,使其易用 2.轻量实现,很容易和任意web框架集成 ## 缺点: 1.多对多查询写起来不直观 3.SQLAlchemy ## 优点:...正向查询:boook表里面有跟publish表关联字段,从book表查询到publish表就叫做正向查询 反向查询:反过来,从publish表查询到book表,就是反向查询 正向查询按字段,反向查询按表名小写...boook表里面有跟author表关联字段,从book表查询到author表就叫做正向查询 反向查询:反过来,从author表查询到book表,就是反向查询 正向查询按字段,反向查询按表名小写_set.all...正向:正向查询按字段 反向查询:反向按表名小写_set.all() 4******基于对象查询,多次查询(子查询) 打印Django查询数据SQL语句

    4.5K10

    Django——model基础

    myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   2、id 字段是自动添加 3、对于外字段,Django 会在字段名上添加"_id" 来创建数据库列名...对查询结果反向排序   distinct():            从返回结果剔除重复纪录   count():              返回数据库匹配查询(QuerySet)...是nid=1书籍对象关联出版社对象 反向查询(按表名:book_set): ?...()  # 与人民出版社关联所有书籍对象集合 基于双下划线跨表查询  Django 还提供了一种直观而高效方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系。...如果我们要对两个字段值做比较,那该怎么做呢? Django 提供 F() 来做这样比较。F() 实例可以在查询引用字段,来比较同一个 model 实例两个不同字段值。 ?

    1.1K100
    领券