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"> ]
当通过外键、多对多字段或一对一字段访问多态模型时,这也同样适用。
功能
完整的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)。
项目详情
关闭
哈希值 for django_polymorphic_ng-0.8.0-py2.py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 47f02b4b72724ad9f39e567c9d115d1a4df18545c01fb8c9b1089e405744751b |
|
MD5 | 84de0e9829ce385f05e31d3cbf9f1b35 |
|
BLAKE2b-256 | 4c486018ddc2e34e8338418a60c86022e8bb0b63396f9230db1a54cf8a209803 |