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

在django中通过FK的FK获取相关对象( _set可以吗?)

在Django中,通过外键(ForeignKey)的外键(ForeignKey)获取相关对象是通过使用_set来实现的。_set是Django中的一个约定,用于表示与外键相关的对象集合。

假设有两个模型,一个是Author,另一个是Book,它们之间存在一对多的关系,即一个作者可以有多本书。在Book模型中,有一个外键字段指向Author模型,可以通过该外键字段获取与之相关的作者对象。

以下是一个示例:

代码语言:txt
复制
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

现在,假设我们有一个book对象,我们可以通过book.author来获取与之相关的作者对象。而如果我们想获取该作者写的所有书籍,可以使用author.book_set.all()

示例代码如下:

代码语言:txt
复制
author = book.author
books = author.book_set.all()

在上述代码中,book.author返回与book相关的作者对象,而author.book_set.all()返回该作者写的所有书籍。

需要注意的是,_set是Django自动生成的,它是根据模型名称和外键字段名称自动推断出来的。如果你想自定义_set的名称,可以通过在外键字段上设置related_name参数来实现。

关于Django的外键和相关对象集合的更多信息,可以参考腾讯云文档中的相关内容:Django外键

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

相关·内容

Django官方文档小结(一) -- Models模型

Django 关系字段 本文主要内容是关于Django框架models知识小结 #1 环境 Python3.7.3 Django==2.0.7 #2 字段 #2.1 一对多(ForeignKey)...一对多 : fk字段"多"models定义 from django.db import models class Blog(models.Model): name = models.CharField..., blank=True, null=True) on_delete=models.SET_NULL, # 删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空,一对一同理) #...删除关联数据,与之关联值设置为默认值(前提FK字段需要设置默认值,一对一同理) on_delete=models.SET, # 删除关联数据, a....与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) #2.4 数据库表示 在生成数据库时,Django追加"_id"字段名称来创建其数据库列名,可以通过指定显式更改此内容db_column

77920
  • Entity Framework 基础知识走马观花

    通过上面的图片,我们可以看到,通过增加代理类B来解耦A与C之间调用,这样可以封装原来C调用A一些相关细节,转换成C直接调用B中封装后代理方法,则等同于访问A。...代理类,真实实体类对象被封装了起来,并且代理类为每个属性都设置了一个标志,用来标识其状态(是否被修改)。而我们程序中所获得数据,都是从代理类返回。   ...而在执行到最后一句时,才去数据库查询所对应Class信息; ? 3.2 浅谈即时加载 所谓即时加载,就是加载数据时就把该对象相关其它表数据一起加载到内存对象中去。   ...与延迟加载相对应,开发如果使用ToList()方法,EF会根据方法条件自动生成SQL语句,然后立即与数据库进行交互获取查询结果,并加载到内存中去。   ...(4)虽然EF做了一些优化,但是有木有一种方法能够让我们只通过一次请求就获取所有的信息呢?SQL语句中,我们可以通过一个超级简单连接查询就可以实现,那么EF呢如何实现呢?

    1.4K20

    Django——模型Model

    ORM简介 对象关系映射(Object Relation Mapping)实现了关系和数据库之间映射,隐藏了关系数据访问细节,不需要再编写SQL语句 创建模型 models.py文件创建类 继承...20)), ('pub_date', models.DateField()), ], ), ] 2执行迁移:根据第一步生成迁移文件在数据库创建表...: 'on_delete' on_delete参数各个值含义: on_delete=None, # 删除关联表数据时,当前表与其关联field行为 on_delete..., blank=True, null=True) on_delete=models.SET_NULL, # 删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空,一对一同理) #...删除关联数据,与之关联值设置为默认值(前提FK字段需要设置默认值,一对一同理) on_delete=models.SET, # 删除关联数据, -------------------

    72250

    DjangoAutoField字段使用

    Django是一个机智框架】 默认情况下Djang会为ORM定义每一张表加上一个自增ID列,并且用这个列来做主键;出于一个MySQL-DBA工作经历我觉得 Djanog还真是机智;这样么说主要是因为我遇到过许多主从延时问题...3、related_name:反向操作时,使用字段名,用于代替原反向查询时”表名_set” 4、on_delete:当删除关联表数据时,当前表与其关联行为,例如删除一个出版社,那么和这个出版社有关联书籍也都被删除掉了...FK字段需要设置为可空) on_delete=models.SET_DEFAULT:删除关联数据,与之关联值设置为默认值(前提FK字段需要设置默认值) on_delete=models.SET:删除关联数据...: a、与之关联值设置为指定值,设置:models.SET(值) b、与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) 5、db_constraint:是否在数据库创建外键约束...类,而Meta类封装了一些数据库信息,主要字段如下: 1、db_table:ORM在数据库表名默认为app_类名,可以通过db_table可以重写表名 2、index_together:联合索引,

    6.5K20

    MySQL索引

    如果表中有相关索引,MySQL可以快速确定在数据文件查找位置,而不必查看所有数据。使用索引是打开MySQL正确方式,本篇将介绍MySQL索引相关内容。...执行联结操作时,从其他表获取数据行。 查找特定索引列“key_col”“MIN()”或“MAX()”值。...某些情况下,可以对查询进行优化,以便在不查询数据行情况下检索值。 需要注意,对于查询需要访问大多数行时,顺序读取比通过索引处理要快。...(0.0112 sec) 用户通过创建索引改善查询性能,例如,查询一个索引字段值,可以快速地返回包含该值行,如果查询非索引字段值,则必须读取全部行以获取该值。...此外,用户也可以通过“ANALYZE TABLE”语句手动更新统计信息。InnoDB将统计信息持久化存储“mysql.innodb_index_stats”表

    18310

    重温MySQL外键约束

    重温MySQL外键约束 MySQL外键约束是用来两个表之间建立链接,其中一个表发生变化,另外一个表也发生变化。从这个特点来看,它主要是为了保证表数据一致性和完整性。...对于两个通过外键关联表,相关联字段主键所在表是主表,也称之为父表,外键所在表是从表,也称之为子表,定义外键时候需要遵守几个规则: 1、父表必须已经存在于数据库,或者是当前正在创建表。...也就是说,只要外键每个非空值出现在指定主键,这个外键内容就是正确。 4、外键数目必须和父表主键数目相同。 5、外键数据类型必须和父表主键对应列数据类型相同。...,子表fk_test_2上进行删除,没有出现任何问题,而在父表fk_test_1上删除时,显示无法删除id=1值,原因是有一个外键约束存在,也就是说,默认情况下,父表进行删除时,无法直接删除子表已经存在依赖关联列值...是默认操作,它表示拒绝父表删除或者修改外键已经被子表所依赖列,这是最安全设置; cascade表示父表发生删除时候直接删除子表记录,这是最危险设置; set null表示父表删除时候,对子表进行

    6.4K10

    数据库外键到底能不能用?

    我们在数据库库设计时候,可能会使用到外键约束这个属性,它是从数据库层面对表之间关系进行了约束,但是如果使用不正确,就可能带来一些隐患,例如Oracle,我们熟知某些场景下,如果外键无索引,就可能导致锁表...外键设计初衷是为了在数据库端保证对逻辑上相关表数据操作上一致性与完整性。 外键大部分企业写开发规范里会直接规避掉!外键有优缺点,也并不是说每种场景都不适用,完全没有必要一刀切。...降低应用代码复杂性,减少了额外异常处理 相关数据管理全由数据库端处理。 增加文档可读性 特别是表设计开始,绘制 ER 图时候,逻辑简单明了,可读性非常强。...并且父表更新会连带子表加上相关锁。 其他功能灵活性不佳 比如,表结构更新等。...,应该尽量减少相关事务锁范围和量级。

    73950

    第05期:外键到底能不能用?

    外键设计初衷是为了在数据库端保证对逻辑上相关表数据操作上一致性与完整性。 外键大部分企业写开发规范里会直接规避掉!外键有优缺点,也并不是说每种场景都不适用,完全没有必要一刀切。...降低应用代码复杂性,减少了额外异常处理 相关数据管理全由数据库端处理。 增加文档可读性 特别是表设计开始,绘制 ER 图时候,逻辑简单明了,可读性非常强。...并且父表更新会连带子表加上相关锁。 其他功能灵活性不佳 比如,表结构更新等。...,应该尽量减少相关事务锁范围和量级。...外键引用多个列,列顺序必须一致。 7. 大对象字段不能作为引用列。 8. constraint 命名必须在单个 database 里唯一。 9. 外键级联更新操作不会触发子表上触发器。 10.

    1.5K20

    Django之ORM字段和参数

    外键类型ORM中用来表示外键关联关系,一般把ForeignKey字段设置 '一对多''多'一方。    ...---- ManyToManyField    用于表示多对多关联关系。在数据库通过第三张表来建立关联关系。...(反向查询)时,我们会这么写: models.Classes.objects.first().student_set.all()   当我们ForeignKey字段添加了参数 related_name... 删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空) models.SET_DEFAULT 删除关联数据,与之关联值设置为默认值(前提FK字段需要设置默认值) models.SET... 删除关联数据,  与之关联值设置为指定值,设置:models.SET(值) 与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) ---- db_constraint

    2.3K60

    Django内置Admin

    Django内置Admin是对于model对应数据表进行增删改查提供组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttypes...django.contrib.messages django.contrib.sessions 模板context_processors:...定制Admin admin.py只需要讲Mode某个类注册,即可在Admin实现增删改查功能,如 1 admin.site.register(models.UserInfo) 但是,这种方式比较简单...New in Django 1.10. 12. save_on_top = False,详细页面,页面上方是否也显示保存删除等按钮 13. inlines,详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除...admin.ModelAdmin):     list_display = ('id', 'title',)     inlines = [UserInfoInline, ] 14. action,列表时,定制action操作

    1.5K90

    Django-admin管理工具

    当你希望整个系统,某个类只能出现一个实例时,单例对象就能派上用场。比如,某个服务器程序配置信息存放在一个文件,客户端通过一个 AppConfig 类来读取配置文件信息。...如果在程序运行期间,有很多地方都需要使用配置文件内容,也就是说,很多地方都需要创建 AppConfig 对象实例,这就导致系统存在多个 AppConfig 实例对象,而这样会严重浪费内存资源,尤其是配置文件内容很多情况下...事实上,类似 AppConfig 这样类,我们希望程序运行期间只存在一个实例对象。...因此,我们只需要把相关函数和数据定义一个模块,就可以获得一个单例对象了。...这里应用是一个单例模式,对于AdminSite类一个单利模式,执行每一个app每一个admin.site都是一个对象

    2.1K20

    django自定义非主键自增字段类型详解(auto increment field)

    多对多:某表创建一行数据是,有一个可以多选下拉框 例如:创建用户信息,需要为用户指定多个爱好 一对一:某表创建一行数据时,有一个单选下拉框(下拉框内容被用过一次就消失了 例如:原有含10...,删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空) - models.SET_DEFAULT,删除关联数据,与之关联值设置为默认值(前提FK字段需要设置默认值) - models.SET...与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) def func(): return 10 class MyModel(models.Model): user = models.ForeignKey...parent_link=False # Admin是否显示关联数据 OneToOneField(ForeignKey) to, # 要进行关联表名 to_field=None # 要关联字段名称...gt=0) v[0].b.caption #通过.进行跨表操作,在对象中去做跨表操作用.

    2.3K10

    django模型动态修改参数,增加 filter 字段方式

    其它属性详情请查看:官方文档 关系字段 ForeignKey 外键类型ORM中用来表示外键关联关系,一般把ForeignKey字段设置 ‘一对多’’多’一方。...(反向查询)时,我们会这么写: models.Classes.objects.first().student_set.all() 当我们ForeignKey字段添加了参数 related_name...:删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空) models.SET_DEFAULT:删除关联数据,与之关联值设置为默认值(前提FK字段需要设置默认值) models.SET...与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) def func(): return 10 class MyModel(models.Model): user = models.ForeignKey...through:使用ManyToManyField字段时,Django将自动生成一张表来管理多对多关联关系。

    3.8K31
    领券