跳转到主要内容

Django模型的无缝多态继承

项目描述

https://travis-ci.org/django-polymorphic/django-polymorphic.svg?branch=master https://img.shields.io/pypi/v/django-polymorphic.svg https://img.shields.io/codecov/c/github/django-polymorphic/django-polymorphic/master.svg https://readthedocs.org/projects/django-polymorphic/badge/?version=stable

为Django的多态模型

django-polymorphic简化了在Django项目中使用继承模型。当在基类模型上进行查询时,会返回继承的模型类。

当我们要存储从Project模型继承的模型时...

>>> Project.objects.create(topic="Department Party")
>>> ArtProject.objects.create(topic="Painting with Tim", artist="T. Turner")
>>> ResearchProject.objects.create(topic="Swallow Aerodynamics", supervisor="Dr. Winter")

…并且想检索所有项目,将返回子类模型!

>>> Project.objects.all()
[ <Project:         id 1, topic "Department Party">,
  <ArtProject:      id 2, topic "Painting with Tim", artist "T. Turner">,
  <ResearchProject: id 3, topic "Swallow Aerodynamics", supervisor "Dr. Winter"> ]

使用纯Django,我们得到的是基类对象,这通常不是我们想要的。

>>> Project.objects.all()
[ <Project: id 1, topic "Department Party">,
  <Project: id 2, topic "Painting with Tim">,
  <Project: id 3, topic "Swallow Aerodynamics"> ]

当通过ForeignKeys、ManyToManyFields或OneToOneFields访问多态模型时,这也同样有效。

特性

  • 完全集成到管理后台。

  • ORM集成

    • 支持ForeignKey、ManyToManyField、OneToOneField描述符。

    • 继承模型的过滤/排序(ArtProject___artist)。

    • 过滤模型类型:instance_of(...)not_instance_of(...)

    • 合并不同模型的查询集(qs3 = qs1 | qs2

    • 支持自定义用户定义的管理器。

  • 使用最少查询次数来检索继承模型。

  • 在需要时禁用多态行为。

虽然django-polymorphic使子类模型在Django中使用变得简单,但我们仍然建议谨慎使用。每个子类模型都会要求Django执行INNER JOIN以从数据库中检索模型字段。考虑到这一点,使用子类模型是有合理理由的。这正是这个库设计的目的!

django-polymorphic的当前版本支持Django 2.1、2.2、3.0、3.1,并且支持Python 3.5+。对于旧版本的Django,请安装django-polymorphic==1.3

有关更多信息,请参阅Read the Docs上的文档

安装

使用pip进行安装...

$ pip install django-polymorphic

许可

Django-polymorphic使用与Django相同的许可证(BSD类似)。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

django-polymorphic-3.1.0.tar.gz (50.1 kB 查看哈希值)

构建分布

由以下支持