Meta和多表继承,继承与反向关系

news2024/12/28 20:09:56

1. Meta和多表继承

在Django模型多表继承中,子类不会继承父类中的Meta类。所有的Meta类属性已被应用至父类,在子类中再次应用则会导致行为冲突。因此,子类模型无法访问父类中的Meta类。

不过也有例外情况,若子类未指定ordering属性或get_latest_by属性,则子类会从父类继承这些属性;而如果父类有排序属性,而设计子类时并不期望有排序属性,则可以显式进行禁止。示例代码如下:

【代码3-22】

01  class ChildModel(ParentModel):

02      #...

03      class Meta:

04          # Remove parent's ordering effect

05          ordering = []

06      #...

07      pass

【代码分析】

在第01~07行代码中,定义了一个子类ChildModel,它继承自父类ParentModel,具体内容说明如下:

  • 在第03~05行代码中,定义了子类ChildModel的Meta类。其中,第05行代码定义了一个为空的ordering属性,实现了显式地禁止ordering排序属性的操作。

2. 继承与反向关系

在Django模型继承中,由于多表继承使用隐式的OneToOneField连接子类和父类,因此直接从父类访问子类是可能的。同时,使用的名字是ForeignKey和ManyToManyField关系的默认值。

但是,如果在继承父类模型的子类中添加了这些关联,则必须指定related_name属性。如果不小心遗漏了,Django框架就会抛出一个合法性错误。

例如,使用【代码3-20】中的Place基类创建另一个子类Restaurant,且包含一个ManyToManyField,示例代码如下:

【代码3-23】

01  class Restaurant(Place):

02    customers = models.ManyToManyField(Place)

03    #...

04    pass

【代码分析】

第01~04行代码中,定义了一个子类Restaurant,它继承自父类Place。其中,在第02行代码中定义了子类与父类的ManyToManyField关系。

注意,由于子类Restaurant中没有定义related_name属性,因此会出现异常。

如果想让【代码3-23】的错误异常不出现,就需要将related_name属性添加进ManyToManyField关系中,示例代码如下:

【代码3-24】

01  class Restaurant(Place):

02    customers = models.ManyToManyField(Place, related_name='provider')

03    #...

04    pass

【代码分析】

第02行代码在定义子类与父类的ManyToManyField关系中,添加了“related_name='provider'”属性。

本文节选自《Django 5企业级Web应用开发实战(视频教学版)》,获出版社和作者授权发布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1619399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机使用循环来实现延时和定时器延时的区别是什么?

循环延时是一种简单的实现方式,但由于资源占用和精确度的限制。我这里有一套嵌入式入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习嵌入式,不妨点个关注,给个评论222,私信22,我在…

FPGA秋招-笔记整理(2)

一、数字IC前端设计的主要流程 参考:数字IC前端设计流程及工具【RTL设计功能仿真】【综合】【DFT】【形式验证】【STA静态时序分析】 以门级网表(Netlist)的生成为界限,将整个流程分为前端和后端。 布局布线之前可以认为是前端…

sudo的设置

sudo指令就是提高你的用户权限,用来完成root可以完成的工作,但是有一个前提,就是被root添加到信任名单中,接下来我们要讲解如何在root中添加用户到信任名单中。 在root中输入指令: 即可到达添加信用列表的位置&#x…

书生·浦语大模型第二期实战营第四节-XTuner 微调 LLM:1.8B、多模态、Agent 笔记

来源: 视频来源:XTuner 微调 LLM:1.8B、多模态、Agent 1. XTuner 微调 LLM:1.8B、多模态、Agent 1.1 为什么要微调 1.2 两种Finetune范式 在LLM的下游应用中,增量预训练和指令跟随是经常会用到的两种微调模式。 增…

基于Python+Selenium+Pytest的Dockerfile如何写

使用 Dockerfile 部署 Python 应用程序与 Selenium 测试 在本文中,我们将介绍如何使用 Dockerfile 部署一个 Python 应用程序,同时利用 Selenium 进行自动化测试。我们将使用官方的 Python 运行时作为父镜像,并在其中安装所需的依赖项和工具…

sql server 恢复数据库、单表数据的方法

1、查看备份文件在哪个路径、一般文件夹名都是叫:Backup 2、下面开始还原(恢复)数据库,对着【数据库】右键--【新建数据库】--然后随便命名,如下图 3、你要是想改路径的话就拉过来,2行都要改、不想多事就直…

(四)Servlet教程——Maven的安装与配置

1.在C盘根目录下新建一个Java文件夹,该文件夹用来放置以下步骤下载的Maven; 2. 下载Maven的来源有清华大学开源软件镜像站和Apache Maven的官网,由于清华大学开源软件镜像站上只能下载3.8.8版本以上的Maven,我们选择在Apache Maven的官网上下…

Error: ‘\bibliographystyle‘ invalid for ‘biblatex‘.

这个错误是因为使用了 biblatex ,而不是传统的 BibTeX, 而 \bibliographystyle命令只能用于 BibTeX。 我的就是上述原因,冲突问题。 一种解决方法: 注释掉原文中的\usepackage{biblatex}等和biblatex 有关内容

上汽大通:依托电子签网络,升级产业供应链协同

2023年12月,法大大发布了中国首部《汽车行业合同数智化白皮书》(点击阅读及下载:中国首部!《汽车行业合同数智化白皮书》重磅发布 | 附下载)。该白皮书中基于法大大自身参与汽车行业合同数智化建设的实践和思考&#x…

笔试题之理发师问题DDD建模

背景 题目: 假设有一个理发店只有一个理发师,一张理发时坐的椅子,若干张普通椅子顾客供等候时坐。没有顾客时,理发师睡觉。顾客一到,叫醒理发师。如果理发师没有睡觉,而在为别人理发,他就会坐…

minicom安装及使用

1.安装 sudo apt-get install minicom 2.配置 sudo minicom -s 光标在 Serial port setup 上按enter键进入配置 ls /dev/ttyUSB* 查看对应 usb 节点 按相应字母进入配置 回到主菜单选择 Save setup as dfl 保存为默认配置,然后退出重新打开 3. 使用 sudo mini…

LabVIEW专栏八、类

该章目的是可以开发仪器类。 一、类的概述 一般来说类有三大特性,封装,继承和多态。 在实际项目中,最主要是继承和多态,要搞清楚这两者的概念和在LabVIEW中是怎样应用的。在LabVIEW中,面向对象编程用到的就是LabVIE…

红海云签约南都物业,助力物管行业人力资源数智一体化

南都物业服务集团股份有限公司(以下简称“南都物业”)是中国第一代、浙江省第一批注册成立的独立第三方物业服务企业,也是国内A股主板市场物业行业第一股(股票简称:南都物业,股票代码:603506&am…

PS入门|用PS设计物品尺寸,需要注意的几个重要问题

注:仅学习使用 【PS24】2024版本更新的内容比较多,对电脑配置的要求也是比较高的。建议配置:第十代i5或以上CPU。 如果是第十代i3或以下的CPU,建议安装PS2021或者以下版本。 ---这是一条不正经的分割线--- 讲了那么久的PS教程…

设计模式-构建者模式

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS二次开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 定义 特点 使用场景 优缺点 (1) 优点 …

重看Spring聚焦Environment分析

目录 一、理解Environment的设计 (一)整体理解 (二)聚焦Profiles分析 (三)聚焦Properties分析 二、Environment类图结构分析 三、PropertyResolver源码分析 (一)源码展示说明…

广东理工学院携手泰迪智能科技成功部署人工智能实验室

广东理工学院是经国家教育部批准设立的全日制普通本科院校,入选全国应用型人才培养工程培养基地、国家级众创空间试点单位、广东省高校电子商务人才孵化基地。开设34个本科专业,涵盖工学、经济学、管理学、文学、艺术学、教育学等6大学科门类&#xff0c…

Power BI 如何创建页面导航器?(添加目录按钮/切换页面按钮)

Power BI 中页导航是什么? 在Power BI中,页导航(Page Navigation)是指在报告中创建多个页面(页),然后允许用户在这些页面之间进行导航的功能。 如下图所示,页导航的选项和报告中的…

李飞飞团队《2024 年人工智能指数报告》AI十大趋势:中国AI专利数全球第一

《2024 年人工智能指数报告》 当地时间4月15日,斯坦福大学“以人为本”人工智能研究院(Human Centered Artificial Intelligence,简称HAI)发布了第七个年度AI Index报告,这是关于AI行业现状的最全面的报告之一。 报告…

聊聊go语言中的GMP模型

写在文章开头 我们都知道go语言通过轻量级线程协程解决并发问题,按照go语言的思想这些协程运行完成后即焚,那么go语言如何保证并发线程有序获取协程呢? 带着这个问题我们从go语言底层的源码来阐述这个问题: Hi,我是 s…