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

Django 模型继承 BaseModel

模型继承 模型继承Django 中与普通继承在 Python 中的工作方式几乎完全相同,但也仍应遵循本页开头的内容。这意味着其基应该继承django.db.models.Model。...从抽象基继承来的字段可被其它字段或值重写,或用 None 删除。 对很多用户来说,这种继承可能就是你想要的。它提供了一种在 Python 级抽出公共信息的方法,但仍会在子类模型中创建数据表。...这在抽象基中一般会引发问题,因为基中的字段都被子类继承,且保持了同样的值(包括 related_name 和 related_query_name)。...然而,这会是个经常重复的且容易出错的过程,因为你要在做任何修改时保持两个副本的同步。 另一方面,代理模型意在表现的和所代理的模型一样。它们总是与父模型保持一致,因为它们直接从福利继承字段和管理器。...这个限制并不适用于从抽象模型继承模型字段。这些字段可以用另一个字段或值覆盖,或者通过设置 field_name = None 来删除。 警告 模型管理器是从抽象基继承的。

2.1K10

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

模型继承 Django 中的模型继承与 Python 中普通继承方式几乎完全相同,但是本页头部列出的模型基本的要求还是要遵守。...这表示自定义的模型应该继承django.db.models.Model。...元 继承 当一个抽象被创建的时候, Django会自动把你在基中定义的 Meta 作为子类的一个属性。如果子类没有声明自己的Meta , 他将会继承的Meta....因此在数据保存时,代理 model 相当于完全复制了原始 模型的存储结构。 多重继承 就像Python的子类那样,DJango模型可以继承自多个父模型。切记一般的Python名称解析规则也会适用。...你应该尝试将你的继承关系保持得尽可能简洁和直接,这样你就不必费很大力气来弄清楚某段特定的信息来自哪里。 Changed in Django 1.7.

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

    如何在 Django 中创建抽象模型

    我们将学习如何在 Django 中创建抽象模型Django 中的抽象模型是一个模型,它用作其他模型继承的模板,而不是一个旨在创建或保存到数据库的模型。...在应用程序中,可以使用抽象模型定义多个模型共享的相似字段和行为。使用 Django,您可以定义一个派生自 Django.db.models 的模型,以建立一个抽象模型。...此抽象的属性和方法将由派生自它的任何模型继承,但不会创建新的数据库表。 抽象模型可以像标准模型一样定义字段、方法和元数据。...在 Django 中,从抽象模型继承遵循与传统模型相同的准则。中声明的所有字段和方法都由子类继承子类可以根据需要替换或添加它们。开发从抽象模型派生的新模型时,不应将抽象属性设置为 True。...创建抽象模型的步骤 步骤 1 - 设置一个继承django.db.models 的新。抽象模型使用模型。此类可以具有您喜欢的任何名称,但最好使用准确描述它在应用程序中的功能的名称。

    21430

    Django中的多态模型概念、使用场景以及如何实现多态模型

    多态模型的使用场景多态模型在实际应用中有广泛的使用场景,如下所示:网站评论系统:评论可以针对文章、图片、视频等不同类型的内容,使用多态模型可以轻松地存储不同类型的评论并保持良好的扩展性。...多态模型的实现方法在Django中,我们可以使用两种方法来实现多态模型:抽象基和第三方库。方法一:抽象基Django的抽象基是一种用于定义模型共享字段和行为的方式。...通过创建一个抽象基,然后让子类继承它,我们可以实现多态模型。...Article、Image 和 Video 分别是三个子类,每个子类都可以有自己的特定字段。方法二:第三方库除了使用抽象基,我们还可以使用第三方库来实现多态模型。...django-polymorphic 提供了一些额外的功能,如过滤查询、获取所有子类等。总结多态模型Django中一种强大的工具,可以帮助我们管理复杂的数据关系。

    31620

    python技术面试题(十九)--腾讯

    4.Django中ORM如何使用? Django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型,通过模型和对象完成数据表的增删改查操作。...使用Django进行数据库开发的步骤如下: 1.配置数据库连接信息。 2.在 models.py中定义模型。 3.迁移。 4.通过和对象完成数据增删改查操作。...定义模型时,我们继承了 models.Model,这个模块在 django.db中。我们在查询操作时,需要导入模型,通过和对象完成数据增删改查。...多继承继承所有父的属性和方法。如果多个父中有同名的属性和方法,则默认使用第一个父的属性和方法。...7.继承,在执行析构函数时,先执行父的,还是先执行子类的? 答:析构时,会先调用子类的析构函数,再调用父的。 初始化子类时,会先自动调用父的构造函数,然后调用子类的构造函数。

    3.8K40

    00x: Django models.Model详解

    继承 Django中Model的继承方式几乎和Python中继承方式几乎一样。...所有的model都继承于实例django.db.models.Model。 你需要做的决定仅仅是你的父model的角色:是作为一个抽象,给子类提供一个通用部分的描述?...当它被其他model作为基时,它的字段将会作为继承它基的字段。子类中的字段名不能和基中的字段名一样,否则会报错。...Meta继承 当一个抽象基被创建的时候,Django会声明一些Meta 内部类,若子类没有声明它自己的Meta,它就会继承父Meta。...如果子类想要拓展父Meta,需要先继承,再拓展: Django对于抽象基Meta做了调整:在使用Meta属性的时候,会设置abstract=False 。

    1.7K20

    django 1.8 官方文档翻译: 3-4-2 内建显示视图

    此外,有问题的模型可以作为一个额外的参数传递到URLconf中。 Django通过通用视图来完成下面一些功能: 为单一的对象展示列表和一个详细页面。...如果你将你的视图实现为通用视图的子类,你就会发现这样能够更有效地编写你想要的代码,使用你自己的基于或功能的视图。 在一些三方的应用中,有更多通用视图的示例,或者你可以自己按需编写。...,合并到所有中的上下文数据。...要在你自己想要改变上下文的保持这一行为,你应该确保在中调用了get_context_data。如果没有任意两个尝试定义相同的键,会返回异常的结果。...然而,如果任何一个尝试在持有一个键的情况下覆写它(在调用之后),这个的任何子类都需要显式于之后设置它,如果你想要确保他们覆写了所有的话。

    1.4K40

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

    通常来说,每个模型都对应数据库中的一张表。 基础: 每个模型都是django.db.models.Model子类模型的每个属性都表示数据库中的一个字段。...Meta 继承 创建抽象基的时候,Django 会将你在基中所声明的有效的 Meta 内嵌做为一个属性。如果子类没有声明它自己的 Meta 内嵌,它就会继承的 Meta 。...多表继承中的Meta 在多表继承中,子类继承的 Meta 内嵌是没什么意见的。所有的 Meta 选项已经对父起了作用,再次使用只会起反作用。...但是在某些受限的情况下,子类可以从父继承某些 Meta :如果子类没有指定 django.db.models.Options.ordering 属性或 django.db.models.Options.get_latest_by...(注:这是说你不必花精力去穷究某个字段,属性,方法是从哪个父继承的) 不允许”隐藏”字段 普通的 Python 继承允许子类覆盖父的任何属性。

    3.1K30

    Django 学习笔记之模型高级用法(下)

    抽象模型一般被当作基,它持有子类共有的字段。值得注意的是,抽象模型在数据库中不会生成表。...但是 abstract 属性不会被继承。 2)多表继承 这种方式继承方式,子模型的父模型可以一个或者多个。 当父模型是正常的模型,即不是抽象模型,在数据库中有对应表。...虽然在 Model 层不推荐使用多重继承,但 Django 的 ORM 还是支持这样的使用方式。如果使用多表继承,子模型跟每个父模型都会添加一个一对一的关系。...3)代理模型 使用多表继承时,父的每个子类都会创建一张新数据表。但是我们只是想扩展一些方法,而不想改变模型的数据存储结构。我们可以将在 Meta 中增加约束 proxy=True 来实现。...此时子模型称为父模型的代理子类中只能增加方法,而不能增加属性。

    1.8K20

    教你 10 分钟构建一套 RESTful API 服务( 下 )

    实现 具体步骤如下: 第 1 步,编写模型,并映射数据库 新建一个继承django.db.models 中的 Model 对象,新增几个字段,指定数据类型和默认值 # api/restfulapi...第 2 步,序列化模型 使用 djangorestframework 提供的序列化器 ModelSerializer,将上面定义好的模型转换为其他数据格式,比如:JSON 需要注意的是,这里可以序列化所有字段...): """更新一条音乐数据""" pass def destroy(self, request, *args, **kwargs): """删除一条数据...JsonResponse(Response): """ 自定义Response,继承rest framework的Response """ def __init__(...self[name] = value 异常处理:针对不存在的资源请求,不同的错误状态码,返回不同的数据 需要注意的是, settings.py 文件指定的异常处理和该异常处理的路径要保持一致

    1.6K40

    django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)

    自定义管理器 在一个特定的模型中,你可以通过继承管理器来构建一个自定义的管理器,以及实例化你的自定义管理器。...继承模型管理器两者之间配合得并不是很好。...下面就是 Django 如何处理自定义管理器和模型继承(model inheritance)的: 定义在非抽象基中的管理器是 不会 被子类继承的。...如果你想从一个非抽象基中重用管理器,只能在子类中重定义管理器。 这是因为这种管理器与定义它的模型 绑定得非常紧密,所以继承它们经常会导致异常的结果(特别是默认管理器运行的时候)。...因此,它们不应继承子类。 定义在抽象基中的管理器总是被子类继续的,是按 Python 的命名解析顺序解析的(首先是子类中的命名覆盖所有的,然后是第一个父的,以此类推)。

    97520

    教你 10 分钟构建一套 RESTful API 服务( Django篇 )

    实现 具体步骤如下: 第 1 步,编写模型,并映射数据库 新建一个继承django.db.models 中的 Model 对象,新增几个字段,指定数据类型和默认值 # api/restfulapi...,'created') 第 3 步,定义 CRUD djangorestframework 的 ModelViewSet 定义了 CRUD 的全部功能 所以只需要编写一个 ModelViewSet 的子类...):         """更新一条音乐数据"""         pass     def destroy(self, request, *args, **kwargs):         """删除一条数据... JsonResponse(Response):     """     自定义Response,继承rest framework的Response     """     def __init__(...:                 self[name] = value 异常处理:针对不存在的资源请求,不同的错误状态码,返回不同的数据 需要注意的是, settings.py 文件指定的异常处理和该异常处理的路径要保持一致

    6.1K10

    drf框架中所有视图及用法

    0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图 from django.views import View from rest_framework import views,...generics, mixins, viewsets 最基础:django自带的views drf框架中最基础的视图:views.APIView drf框架中工具视图:generics GenericAPIView...({'get': 'retrieve', 'delete': 'remove_obj'}) GenericViewSet:与模型有关的接口视图集 - 可以从mixins那继承功能,也可以自定义功能 ViewSet...:与模型无关或不是标准模型接口 - 一般都是自定义功能 三.generics中GenericAPIView使用 将 queryset 和 serializer_class 封装成类属性,提供了三个方法...,且创建的视图必须继承其方法的为父 五.generics中继承GenericAPIView的子类使用 class BookRetrieveUpdateAPIView(generics.RetrieveUpdateAPIView

    1.8K30

    流畅的 Python 第二版(GPT 重译)(七)

    Sequence ABC 和 collections.abc 中相关抽象的 UML 图。继承箭头从子类指向其。斜体字体的名称是抽象方法。...MutableSequence ABC 及其来自 collections.abc 的的 UML 图(继承箭头从子类指向祖先;斜体名称是抽象和抽象方法)。...截至 2021 年,对继承的过度使用存在明显的反对意见,不仅仅是多重继承,因为子类之间紧密耦合。...当子类重写的方法时,通常需要调用的相应方法。...警告 由于方法可能以意想不到的方式忽略子类覆盖,因此从任何复杂类继承并覆盖其方法是容易出错的。尽可能避免覆盖方法,或者至少限制自己只继承易于扩展的,并且只以设计为可扩展的方式进行扩展。

    19110

    《流畅的Python》第十二章学习笔记

    小结 直接子类化内置类型容易出错,因为内置类型的方法通常会忽略用户覆盖的方法。 不要子类化内置类型,用户自己定义的应该继承collectiions模块中的。...) ⚠️直接在上调用实例方法,必须显式传入self参数,因为这样访问的是未绑定方法 处理多重继承的建议 把接口继承和实现继承区分开 创建子类的原因: 继承接口,创建子类型,实现「是什么」关系 继承实现...继承重用代码是实现细节,通常可以换用组合和委托模式 使用抽象基显式表示接口 创建abc.ABC或其他抽象基子类 通过混入重用代码 混入绝对不能实例化,而且具体不能只继承混入。...不要子类化多个具体 具体中除了这一个具体之外,其余的都是抽象基或者混入。...为用户提供聚合 一个空的继承了多个,方便用户直接使用,例如Django的ListView 优先使用对象组合,而不是继承

    43510
    领券