首页
学习
活动
专区
工具
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中一种强大的工具,可以帮助我们管理复杂的数据关系。

    31520

    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-5-1 管理器 (初稿)

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

    97520

    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

    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

    教你 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 文件指定的异常处理和该异常处理的路径要保持一致

    6K10

    【16】进大厂必须掌握的面试题-100个python面试

    原始数组或列表保持不变。 Q22。您如何在Python中将列表项随机化?...我们继承称为,而继承称为派生/子类。 它们是Python支持的不同类型的继承: 单一继承–派生获取单个的成员。 多级继承-从基base1继承的派生d1和从base2继承的d2。...层次继承–从一个基可以继承任意数量的子类 多重继承–派生继承自多个基。 Q56。如何在Python中创建? 回答: Python中的是使用class关键字创建的。...列出Django中的继承样式。 回答: 在Django中,有三种可能的继承样式: 抽象基:当您只希望父保留您不想为每个子模型键入的信息时,使用此样式。...多表继承:如果要对现有模型进行子类化并且需要每个模型都有自己的数据库表,则使用此样式。 代理模型:如果只想修改模型的Python级别行为,而不更改模型的字段,则可以使用此模型

    16.4K30

    自定义Django认证系统的技术方案

    Django除了User模型,还有2个抽象模型AbstractUser和AbstractBaseUser,从源码中可以看到它们的继承关系: class User(AbstractUser):...这是因为一般继承有2个用途,一是继承的属性和方法,并做出自己的改变或扩展,实现代码重用。但是这种方式会导致子类也包含了父的实现代码,代码强耦合,所以实践中不会这么做。...而是采用第二种方式,把共性的内容抽象出来,只定义属性和方法,不提供具体实现(如java中的接口),并且只能被继承,不能被实例化。...继承AbstractUser 除了代理模型和OneToOneField,扩展User的新方式是定义新的MyUser并继承AbstractUser,把User替换掉,再添加额外信息。...继承AbstractBaseUser 继承AbstractUser只能做扩展,如果我们想完全自定义用户模型,那么就需要继承AbstractBaseUser,再重写属性和方法。

    1.2K10
    领券