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

djangorelated_name用法说明

fruits = buyer.fruit_set.all() """ django 默认每个主表对象都有一个是外键属性,可以通过它来查询到所有属于主表子表信息。...这个属性名称默认是以子表名称小写加上_set()来表示,这里我们主表是buyer,字表是fruit,所以主表外键属性就是fruit_set """ 上面的fruit_set是django为对象buyer...而related_name就实现这个功能,在字表中定义外键时,增加related_name字段指定这个字表在主表中对应外键属性, 如下: class Fruit(models.Model): buyer...= models.ForeignKey(Buyer, related_name='buyer_fruit') """ 主表:buyer 子表:fruit 子表在主表中对应外键属性:related_name...100).first() #然后通过子表中自定义外键获取子表所有信息: fruits = buyer.buyer_fruit.all() 以上这篇djangorelated_name用法说明就是小编分享给大家全部内容了

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

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

这是因为 Django 会对每个 SQL 查询数据库名称和列名称做重编码,至于如何编码视你所用数据库而定。...然而如果将它做为其他 model ,那么该类字段就会被添加到子类中。抽象和子类如果含有同名字段,就会导致错误(Django 将抛出异常)。...Meta 继承 创建抽象时候,Django 会将你在中所声明有效 Meta 内嵌做为一个属性。如果子类没有声明它自己 Meta 内嵌,它就会继承父 Meta 。...但在抽象上这样做就会引发一个很严重问题。因为 Django 会将字段添加到每个子类当中,而每个子类字段属性值都完全相同 (这里面就包括 related_name)。...这是因为子类需要一个空间来存储不包含在字段数据。但有时,你可能只想更改 model 在 Python 层行为实现。比如:更改默认 manager ,或是添加一个新方法。

3.1K30

Django外键(ForeignKey)操作以及related_name作用

之前已经写过一篇关于Django外键文章,但是当时并没有介绍如何根据外键对数据操作,也就是如何通过主表查询子表或者通过子表查询主表信息 首先我定义了两个模型,一个是老师模型,一个是学生模型,...一个老师对应多个学生,这个算是一个一对多类型(如下图所示) 那么如果我们要想查询一个老师对应学生有哪些,该如何操作呢?...,并获取老师相关信息 返回一个teacher对象,接下来就是查询teacher相关联学生对象,在这里有一个需要注意点,django默认情况下每一个主表对象都有一个是外键属性,可以通过它查询到所有关于子表信息...,这个属性名字就是子表名称小写加上_set,具体到这个就是student_set,默认返回是QuerySet,操作如下: 在这里也会牵涉到另外一个知识点related_name使用...migrate 从上图可以看到和之前_set操作效果是一样,这两个方法是相同,所以如果觉得比较麻烦的话,可以在定义主表外键时候,直接就给外键定义好名称使用related_name

2K10

Django 模型继承 BaseModel

模型继承 模型继承在 Django 中与普通继承在 Python 中工作方式几乎完全相同,但也仍应遵循本页开头内容。这意味着其应该继承自 django.db.models.Model。...Meta 继承 当一个抽象被建立,Django 将所有你在中申明 Meta 内部类以属性形式提供。若子类未定义自己 Meta ,它会继承父 Meta。...这在抽象中一般会引发问题,因为字段都被子类继承,且保持了同样值(包括 related_name 和 related_query_name)。...但是,若你忘了使用它们,Django 会在你执行系统检查(或运行 migrate)时抛出错误。 如果你未指定抽象 related_name 属性,默认反转名会是子类名,后接 '_set' 。...在 Django 中,模型字段通常不允许这样做。如果一个非抽象模型有一个名为 author 字段,你就不能在继承自该任何中,创建另一个名为 author 模型字段或属性。

2K10

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

元 继承 当一个抽象被创建时候, Django会自动把你在中定义 Meta 作为子类一个属性。如果子类没有声明自己Meta , 他将会继承父Meta....但在抽象上这样做就会引发一个很严重问题。因为 Django 会将字段添加到每个子类当中,而每个子类字段属性值都完全相同 (这里面就包括related_name)。...当你在(且仅在)抽象中使用 related_name 时,如果想绕过这个问题,名称中就要包含'%(app_label)s'和 '%(class)s'。...果你没有在抽象中为某个关联字段定义 related_name 属性,那么默认反向名称就是子类名称加上'_set',它能否正常工作取决于你是否在子类中定义了同名字段。...但有时,你可能只想更改 model 在 Python 层行为实现。比如:更改默认 manager ,或是添加一个新方法。

4.9K20

python Django 反向访问器外键冲突解决

我有两个继承一个Django模型: – Request – Inquiry – Analysis 请求有两个外键到内置用户模型。...(User, related_name=’requests_assigned’) 由于某种原因,我得到错误 “Analysis.assign_user”反向访问器与“Inquiry.assign_user...我读过所有内容说,设置related_name应该防止冲突,但我仍然得到相同错误。任何人都能想到为什么会发生这种情况?谢谢!...)s_requests_created’) 补充知识:django related_name禁用反向映射 官方文档处理办法: ?...直接将related_name赋值为加号或以加号结尾字符串,即可实现禁用反向映射 以上这篇python Django 反向访问器外键冲突解决就是小编分享给大家全部内容了,希望能给大家一个参考。

1.4K10

python抽象

与jvm上语言不一样,python语言没有interface关键字,而且除了抽象,每个都有相应接口:实现或继承公开属性(方法或数据类型) 在定义里,受保护属性和私有属性不在接口中:即便...“鸭子类型”:忽略对象真正类型,转而关注对象有没有实现所需方法,签名和语义。 继承抽象很简单,只要实现python里特殊方法__len__之类,这样python就会自动识别。...抽象继承大多都是在collections模块,现在打开这个模块文档看看。...MappingView,Set __contains__,__iter__ ValuesView MappingView __contains__,__iter__ 从官方文档中可以看出,一共有16个...,分为三层: --顶层是Iterable,Container,Sized,Callable,Hashable: 其中Iterable,Container,Sized是各个集合该继承三个抽象,或者至少实现兼容协议

86810

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

Django设置 通过图书管理系统引入多表操作:如果我们创建表方式是先抽象出表与表之间相同字段建一个父,然后在用每个表去继承这个父,如下面的代码,我们将无法得到期望表字段。...Django内嵌,它作用是给自己上级添加一些功能或者指定一些标准,abstract = True 将该定义为抽象,即不生成数据库表单,只作为一个可以继承,把一些子类必须代码放在...关于Django Meta详细讲解可以参考该博客。...更合理) """ Django orm中外键字段属性详解 在建表之前我们对外键字段属性进行了解: 1)related_name在外键中设置外键反向查询字段名:正向找字段名,反向找related_name...值,related_name默认值是表名小写 + _set,这就是为什么在Django中跨表反向查询时我们使用表名小写 + _set去查另一张表数据。

4.3K30

探索 PythonDjango 支持分布式多租户数据库,如 Postgres+Citus

在 Citus 中分发数据 将 Django 应用程序更新为范围查询 使用中间件自动化 更多 在 确定分布策略 中,我们讨论了在多租户用例中使用 Citus 所需与框架无关数据库更改。...在这里,我们专门研究如何借助 django-multitenant 库将多租户 Django 应 用程序迁移到 Citus 存储后端。...将租户列介绍给我们想要分发缺少它模型 更改分布式表主键以包含租户列 更新模型以使用 TenantModelMixin 分发数据 将 Django 应用程序更新为范围查询 准备横向扩展多租户应用程序...为了能够扩展 django,必须对模型进行一些简单更改。...使用中间件自动化 而不是在每个视图中调用 set_current_tenant(), 您可以在 Django 应用程序中创建并安装一个新 middleware 来自动完成。

2K10

如何加载第三方库项目库?

如果你库没有使用命名空间定义的话,实例化时候需要加上根命名空间,官方文档原话 tp中对于没有命名空间, 实例化时候要使用 new \ClassName(); ####第三方库导入(vendor...) ThinkPHP 库都是以.class.php 为后缀,这是系统内置一个约定,当然也可以通过 import 参数来控制,为了更加方便引入其他框架和系统库,系统还提供了一个import...方法别名vendor,专门用于导入第三方库,并且默认起始目录和文件后缀有区别。...use) 应用库通常是在应用或者模块目录下面的库,应用命名空间一般就是模块名称为根命名空间,例如: Home\Model\UserModel(位于Application\Home\Model...这些目录下面的库都可以自动加载,你只要把相应库放入目录中,然后添加或者修改命名空间定义。

1.2K30

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

Django 关系字段 本文主要内容是关于Django框架中models知识小结 #1 环境 Python3.7.3 Django==2.0.7 #2 字段 #2.1 一对多(ForeignKey)...str__(self): return self.headline #2.1 参数 models.ForeignKey(to,on_delete,** options) # to : 关联...与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) #2.4 数据库表示 在生成数据库时,Django追加"_id"字段名称来创建其数据库列名,可以通过指定显式更改此内容db_column...#2.5 反向查找 (related_name) from django.db import models class Blog(models.Model): name = models.CharField...(个人喜好,根据项目中遇到坑,我建议表名应该为:小写app名+小写名) #3.2 跨表订购 (order_with_respect_to) 目前通过做过这些项目,这个功能感觉有点鸡肋,具体怎么用还是要说一下

75520

完整 Django 零基础教程|初学者指南 - 第 3 部分 转自:维托尔·弗雷塔斯

需要注意是,我们不需要创建User 模型,因为 Django 已经在contrib包中内置了User 模型 。我们将使用它。 关于多重性在图(数字 1,0..*等等),这里是你如何阅读: ?...下面是我们如何表示我们图( 见图 4)。...Django 会自动创建这种反向关系——这 related_name是可选。但是如果我们不为其设置名称,Django 将使用名称生成它:(class_name)_set。...您可以在下面看到图和使用 Django 生成模型源代码之间比较。绿线代表我们如何处理反向关系。 ? 图模型定义 此时,您可能会问自己:“主键/ID 怎么样”?...如果我们不为模型指定主键,Django 会自动为我们生成它。所以我们现在很好。在下一节中,您将更好地了解它是如何工作。 迁移模型 下一步是告诉 Django 创建数据库,以便我们可以开始使用它。

2.1K40
领券