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

Django模型继承:从父查询集访问子对象

Django模型继承是一种面向对象的编程技术,它允许在Django框架中创建一个模型类,该模型类可以从另一个模型类继承属性和方法。通过模型继承,可以实现代码的重用和模块化,提高开发效率。

在Django中,模型继承有三种类型:抽象基类继承、多表继承和代理模型继承。

  1. 抽象基类继承:
    • 概念:抽象基类是一个不会生成数据库表的模型类,它只用于被其他模型类继承。抽象基类可以定义公共字段和方法,供子类继承和使用。
    • 优势:通过抽象基类继承,可以避免重复定义相同的字段和方法,提高代码的可维护性。
    • 应用场景:当多个模型类具有相同字段和方法时,可以将这些共同的部分提取到抽象基类中,子类通过继承抽象基类来获取这些共同的属性和方法。
    • 腾讯云相关产品:无
  • 多表继承:
    • 概念:多表继承是指一个模型类可以继承自多个父模型类,每个父模型类对应一个数据库表。子模型类可以访问父模型类的字段和方法,并且可以添加自己的字段和方法。
    • 优势:通过多表继承,可以将数据分散到多个表中,提高数据库的灵活性和性能。
    • 应用场景:当需要将一个模型类的属性和方法分散到多个表中,并且这些表之间存在关联关系时,可以使用多表继承。
    • 腾讯云相关产品:无
  • 代理模型继承:
    • 概念:代理模型继承是指创建一个与原始模型类相同的模型类,但不会生成新的数据库表。代理模型类可以访问原始模型类的字段和方法,并且可以添加自己的字段和方法。
    • 优势:通过代理模型继承,可以在不修改原始模型类的情况下,扩展其功能或修改其行为。
    • 应用场景:当需要对一个模型类进行扩展或修改,但又不希望创建新的数据库表时,可以使用代理模型继承。
    • 腾讯云相关产品:无

总结:Django模型继承是一种强大的编程技术,可以提高代码的重用性和可维护性。通过抽象基类继承、多表继承和代理模型继承,可以实现不同的继承需求。在实际应用中,根据具体的业务需求选择合适的继承方式,以提高开发效率和代码质量。

更多关于Django模型继承的详细信息,请参考腾讯云文档:

  • Django模型继承:https://cloud.tencent.com/document/product/1103/48582
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询

上一篇Django 2.1.7 模型 - 条件查询、模糊查询、空查询、比较查询、范围查询、日期查询讲述了关于Django模型查询。...但是都是条件与常量的查询,以及单条件查询,那么本篇章来介绍F对象、Q对象、聚合查询等功能。...参考文献 https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/ F对象 之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢?...语法如下: F(属性名) 使用F对象需要导入库,如下: from django.db.models import F 下面使用模型查询 shelves_date < update_time 的结果,如下...`update_time` * 2)) LIMIT 21 Q对象 前面的查询可以看到都是单条件查询,并没有多个条件查询

1.8K30

Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询

上一篇Django 2.1.7 模型 - 条件查询、模糊查询、空查询、比较查询、范围查询、日期查询讲述了关于Django模型查询。...但是都是条件与常量的查询,以及单条件查询,那么本篇章来介绍F对象、Q对象、聚合查询等功能。...参考文献 https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/ F对象 之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢?...语法如下: F(属性名) 使用F对象需要导入库,如下: from django.db.models import F 下面使用模型查询 shelves_date < update_time 的结果...`update_time` * 2)) LIMIT 21 Q对象 前面的查询可以看到都是单条件查询,并没有多个条件查询

1.5K30
  • 第一季 | 数据模型知多少?不如实践试一试

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...不要忘了在 settings.py 中设置: AUTH_USER_MODEL = "users.UserProfile" Django 支持三种继承方式: 1. 抽象基类 2. 多表继承 3....代理模型 Django 抽象基类和 Python 的抽象基类不同 抽象基类:只有继承数据模型才会创建数据表,能在抽象父类中定义共同项来减少重复输入,同时没有多表继承的额外数据表和 join 操作的开销...多表继承:父类和子类都会创建对应的数据表。两者之间隐含有一个 OneToOneField 关联,因每个数据模型都有表,故可对父子各自进行查询操作。...同时可以通过 parent.child 从父对象直接访问对象,对子表的查询都会有一个与其所有父表的 join 操作。非常不推荐使用多表继承!

    49910

    Django 模型继承 BaseModel

    多表继承 Django 支持的第二种模型继承方式是层次结构中的每个模型都是一个单独的模型。每个模型都指向分离的数据表,且可被独立查询和创建。...故,子类模型无法访问父类的 Meta 类。不过,有限的几种情况下:若子类未指定 ordering 属性或 get_latest_by 属性,子类会从父继承这些。...连接子类和父类,所以直接从父访问子类是可能的,就像上述例子展示的那样。...代理模型继承“Meta”属性 和普通模型一样。 QuerySet 仍会返回请求的模型¶ 当你用 Person 对象查询时,Django 永远不会返回 MyPerson 对象。...Person 对象查询结果总是返回对应类型。代理对象存在的全部意义是帮你复用原 Person 提供的代码和自定义的功能代码(并未依赖其它代码)。

    2.1K10

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

    Django 提供一套自动生成的用于数据库访问的API;详见执行查询。...Overridden model methods are not called on bulk operations 注意,当使用查询批量删除对象时,将不会为每个对象调用delete() 方法。...每个子 model 都有专属的数据表,都可以查询和创建数据表。 继承关系在 model 和它的每个父类之间都添加一个链接 (通过一个自动创建的 OneToOneField来实现)。 ...(这与使用抽象基类的情况正好相反,因为抽象基类并没有属于它自己的内容) 所以 model 并不能访问它父类的 Meta 类。...查询始终返回请求的模型 也就是说,没有办法让DJango查询Person对象时返回MyPerson对象。Person 对象查询集会返回相同类型的对象

    5K20

    django模型

    每个模型对 应数据库中唯一的一张表 如何编写模型 模型:每个模型都用一个类表示,该类继承django.db.models.Model。...过滤器基于所给的参数限制查询的结果。 从SQL 的角度,查询和SELECT 语句等 价,过滤器是像WHERE 和LIMIT 一样的限制句。 你可以从模型的管理器那里取得查询。...通过模型类来直接访问它, 管理器只可以通过模型的类访问,而不可以通过模型的实例访问,目的是为了强制区分“表 级别”的操作和“记录级别”的操作。 对于一个模型来说,管理器是查询的主要来源。...查询是惰性执行的 —— 创建查询不会带来任何数据库的访问。...当你确实需要结果时, 查询 通过访问数据库来求值 获取一个单一的对象——get() filter() 始终给你一个查询,即使只有一个对象满足查询条件 —— 这种情况下,查询将 只包含一个元素。

    3.1K20

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

    这个例子要注意的一点是: 管理器方法可以访问 self.model来得到它所用到的模型类。 修改管理器初始的查询 管理器自带的 查询返回系统中所有的对象。...由于 get_queryset() 返回的是一个 查询 对象,所以你仍可以对它使用 filter(), exclude()和其他 查询的方法。...使用管理器访问关联对象 默认情况下,在访问相关对象时(例如choice.poll),Django 并不使用相关对象的默认管理器,而是使用一个”朴素”管理器类的实例来访问。...调用自定义的查询 虽然大多数标准查询的方法可以从管理器中直接访问到,但是这是一个例子,访问了定义在自定义 查询上的额外方法,如果你也在管理器上面实现了它们: class PersonQuerySet...不要在这种类型的管理器子类中过滤掉任何结果 一个原因是自动管理器是用来访问关联模型对象。 在这种情况下,Django 必须要能看到相关模型的所有对象,所以才能根据关联关系得到任何数据 。

    97520

    django框架菜鸟教程_django框架菜鸟教程

    # 使用include来将应用users里的全部路由包含进工程路由中 # r'^users/' 决定了users应用的所有路由都已/users/开头,如我们刚定义的视图index,其最终的完整访问路径为...= HeroInfo.objects.get(id=1) h.hbook 访问一对应的模型类关联对象的id 多对应的模型对象.关联类属性_id 关联过滤查询 由多模型类条件查询模型类数据:...().delete() 查询 QuerySet 1、概念:从数据库中获取的对象集合 过滤器方法: all() filter() exclude() order_by() exists():判断查询集中是否有数据...,有返回Ture,无返回False 2、特性 惰性执行:创建查询的时候不会调用数据库,调用数据的时候访问,迭代、序列化、if合用 缓存 3、限制查询查询进行下标或切片操作,切片后返回新的查询...在模型类中封装方法,访问关联对象的成员 右侧栏过滤器:list_filter = [] 搜索框:search_fields = [] 2、调整编辑页展示 显示字段:fields = [] 分组显示:

    3K40

    重点内容回顾-DRF

    创建Django工程: django-admin startproject 工程名称 b. 创建应用: python manage.py startapp 应用名称 c....序列化:将模型对象转换为字典或者json数据的过程。 反序列化:将前端传递的数据保存到模型对象中的过程。 5.4序列化器Serializer 5.4.1功能 进行数据的序列化和反序列化。...class 序列化器类名(serializers.Serializer): # 字段名 = serializer.字段类型(选项参数) 如果我们想要使用序列化器对应的是Django模型类,那么可以继承自...数据库查询 属性: queryset(指定视图所使用的查询) 方法: get_queryset返回视图所使用的查询 get_object从视图所使用的查询集中查询指定的对象,默认根据pk进行查询。...elif self.action == 'latest': # 返回latest操作使用的查询 else: # 返回其他操作所使用的查询 5.6.6

    2.4K20

    Django模型model

    Django模型类开发流程 在models.py中定义模型类,要求继承自models.Model 把应用加入settings.py文件的installed_app项 生成迁移文件 执行迁移生成表 使用模型类进行...可以维护递归的关联关系,使用'self'指定,就是“自关联” 用一访问多:对象.模型类小写_set mytestinfo.testinfo_set.all() 用一访问一:对象.模型类小写...模型类的查询 查询表示从数据库中获取的对象集合 查询可以含有零个、一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询和select语句等价,过滤器像where和limit子句...接下来主要讨论如下知识点 查询 字段查询:比较运算符,F对象,Q对象(1)模型查询集合 在管理器上调用过滤器方法会返回查询 查询经过过滤器筛选后返回新的查询,因此可以写成链式过滤 惰性执行:...创建查询不会带来任何数据库的访问,直到调用数据时,才会访问数据库 何时对查询求值:迭代,序列化,与if合用 返回查询的方法,称为过滤器,管理器对象方法有all()、filter()、exclude

    14010

    Django框架学习(四)

    order_by 1.7关联查询 1、查询和指定对象关联的数据(重点掌握) 由一查多:一对象.多类名小写__set.all() 由多查一:多对象.外键属性 2、通过模型类进行关联查询 查图书:一类.objects.get...|filter(多类名__字段__条件=值) 查英雄:多类.objects.filter(外键属性__字段__条件=值) 2.查询 注意:对于queryset类的对象,可以继续调用之前的任何一个查询函数...两大特性: 1、惰性查询:只有在使用查询集中的数据时才会进行数据库真正查询操作 2、查询结果的缓存:如果使用同一个查询时,只有在第一次使用查询时会进行数据库的查询操作,然后Django框架就会把查询的结果存起来...,下一次再使用这个查询的时候,使用的是Django之前存储的结果。...中定义模型admin的管理类,继承于admin.ModelAdmin 2)admin.site.register(模型类,admin管理类) 3)在Admin管理类中通过对应的类属性控制admin界面内容

    1.5K41

    Django模型

    模型类必须继承自Model类,位于包django.db.models中。 提示:对于重要数据使用逻辑删除。...两大特性 惰性执行:创建查询不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用。...缓存:使用同一个查询,第一次使用时会发生数据库的查询,然后把结果缓存下来,再次使用这个查询时会使用缓存的数据。 查询的缓存 每个查询都包含一个缓存来最小化对数据库的访问。...由一到多的访问语法: 一对应的模型对象.多对应的模型类名小写_set 例: b = BookInfo.objects.get(id=1) b.heroinfo_set.all()  由多到一的访问语法...: 多对应的模型对象.多对应的模型类中的关系类属性名 例: h = HeroInfo.objects.get(id=1) h.hbook  访问一对应的模型类关联对象的id语法: 多对应的模型对象.

    6.1K21

    关于“Python”的核心知识点整理大全54

    3 {% endblock content %} 如果将这些代码与原来的index.html进行比较,可发现我们将标题Learning Log替换成了从父 模板那里继承的代码(见1)。...不是从父模板 继承的内容都包含在content块中,在这里是一个描述项目“学习笔记”的段落。在处,我们 使用标签{% endblock content %}指出了内容定义的结束位置。...{'topics': topics} 5 return render(request, 'learning_logs/topics.html', context) 我们首先导入了与所需数据相关联的模型...函数topics()包含一个形参:Django从服 务器那里收到的request对象(见2)。在3处,我们查询数据库——请求提供Topic对象,并按属 性date_added对它们进行排序。...我们将返回的查询存储在topics中。 在4处,我们定义了一个将要发送给模板的上下文。上下文是一个字典,其中的键是我们将 在模板中用来访问数据的名称,而值是我们要发送给模板的数据。

    17510

    python测试开发django-15.查询结果转json(serializers)

    前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse。...django查询数据库返回json数据有3种方法 serializers转json model_to_dict转字典 values()转list (最简单,推荐!)...它从父继承大部分行为,下面看起构造函数: class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params...'{"foo": "bar"}' serializers转json django里面有个serializers方法可以,直接把查询的结果转成json数据 接着上一篇查询User表里面的所以数据,用all...接下来介绍第二种方法使用model_to_dict方法把查询的queryset序列结果转成字典序列 # helloworld/helloworld/testdb.py from django.http

    2.1K40

    Django相关知识点回顾

    修改 查询对象->修改对象属性->对象.save() 或者: 模型类.objects.filter(...).update(...)...删除 查询对象->对象.delete() 或者: 模型类.objects.filter(...).delete() 查询 模型类.objects.查询函数 查询相关函数: 函数名称 参数 作用 返回值...all 无 查询模型类对应表格中的所有数据 QuerySet(查询) get 查询条件 查询满足条件一条且只能有一条数据 模型对象,查不到会报错DoesNotExist filter 查询条件 返回满足条件的所有数据...QuerySet(查询) exclude 查询条件 返回不满足条件的所有数据 QuerySet(查询) order_by 排序字段 对查询结果进行排序 QuerySet(查询) aggregate...查询结果的缓存 使用同一个查询时,只有在第一次使用查询时会进行数据库的查询操作,然后Django框架就会把查询的结果存起来,下一次再使用这个查询时,使用的Django之前存储的结果。

    10K51

    django_2

    要求 修改数据库 Django shell 数据级联(一对多) 元信息 定义字段 模型过滤 创建对象4种方式 查询 过滤器 获取单个对象 字段查询 时间 聚合函数 跨关系查询 F对象 Q对象...·格式 ·对象.模型类小写_set ·示例 grade.students_set ·用一访问一 ·格式 ·对象.模型类小写 ·示例 ·grade.students...·访问id ·格式 ·对象.属性_id ·示例 ·student.sgrade_id 6.模型过滤(查询Django默认通过模型的objects对象实现模型数据查询.../缓存 查询的缓存:每个查询都包含一个缓存,来最小化对数据库的访问 在新建的查询集中,缓存首次为空,第一次对查询求值,会发生数据缓存,django会将查询出来的数据做 一个缓存,并返回查询结果...·格式 ·对象.模型类小写_set ·示例 grade.students_set ·用一访问一 ·格式 ·对象.模型类小写 ·示例 ·grade.students

    3.6K30

    Django MVT之M

    所有数据字段的属性都必须继承自抽象类django.db.models.Field,开发者可以继承该抽象类来定义自己的字段类型,当然也可以使用Django自带的一系列Field子类。...查询 函数 Django通过模型的objects对象实现模型数据查询,通过模型类.objects.函数调用如下函数来实现对数据库的查询。...查询(QuerySet对象) 调用all, filter, exclude, order_by这些函数会返回一个查询(QuerySet对象),查询有以下特性: 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询...自定义模型管理器 1.自定义一个管理器类,这个类继承models.Manger类。 2.在具体的模型类里定义一个自定义管理器类的对象。...# 1.自定义一个管理器类,这个类继承models.Manger类 class SchoolInfoManager(models.Manager): # 过滤父类方法返回的查询来改变查询

    1K10

    Django 模型查询2.3

    查询 字段查询:比较运算符,F对象,Q对象 查询 在管理器上调用过滤器方法会返回查询 查询经过过滤器筛选后返回新的查询,因此可以写成链式过滤 惰性执行:创建查询不会带来任何数据库的访问...,直到调用数据时,才会访问数据库 何时对查询求值:迭代,序列化,与if合用 返回查询的方法,称为过滤器 all() filter() exclude() order_by() values(...,[0:1].get()引发DoesNotExist异常 查询的缓存 每个查询都包含一个缓存来最小化对数据库的访问 在新建的查询集中,缓存为空,首次对查询求值时,会发生数据库查询django会将查询的结果存在查询的缓存中...,但是如果这部分不在缓存中,那么接下来查询返回的记录将不会被缓存,这意味着使用索引来限制查询将不会填充缓存,如果这部分数据已经被缓存,则直接使用缓存中的数据 字段查询 实现where名,作为方法filter...(bread__gte=F('bcommet')) django支持对F()对象使用算数运算 list.filter(bread__gte=F('bcommet') * 2) F()对象中还可以写作“模型

    2.4K20
    领券