跳转到主要内容

Django模型的无缝多态继承

项目描述

build-status

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"> ]

当通过外键、多对多字段或一对一字段访问多态模型时,这也同样适用。

功能

  • 完整的admin集成。

  • ORM集成

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

  • 继承模型的筛选/排序(ArtProject___artist)。

  • 筛选模型类型:instance_of(...)not_instance_of(...)

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

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

  • 使用最少的查询来获取继承的模型。

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

虽然django-polymorphic使子类化模型在Django中易于使用,但我们仍然建议谨慎使用。每个子类化模型都要求Django执行INNER JOIN以从数据库获取模型字段。考虑到这一点,使用子类化模型有合理的原因。这正是这个库的设计目的!

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

许可证

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

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解安装包的更多信息

源代码发行版

此版本没有可用的源代码发行版文件。请参阅生成发行版存档的教程

构建发行版

django_polymorphic_ng-0.8.0-py2.py3-none-any.whl (43.3 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者