Django模型的无缝多态继承
项目描述
为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类似)。
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装软件包的信息。