django模型的无缝多态继承

django-polymorphic-ng的Python项目详细描述


build-status

django的多态模型

django多态性简化了django项目中使用继承模型的过程。 在基模型上进行查询时,将返回继承的模型类。

当我们存储从Projectmodel继承的模型时…

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

使用vanilla django,我们得到基类对象,这很少是我们想要的:

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

当多态模型通过 外键,多个场或单场。

功能

  • 完全的管理集成。
  • ORM集成:
  • support for ForeignKey, ManyToManyField, OneToOneField descriptors.
  • Filtering/ordering of inherited models (^{tt2}$).
  • Filtering model types: ^{tt3}$ and ^{tt4}$
  • Combining querysets of different models (^{tt5}$)
  • Support for custom user-defined managers.
  • 使用获取继承模型所需的最小查询量。
  • 需要时禁用多态行为。

虽然django多态使子类模型易于在django中使用, 我们仍然鼓励谨慎使用它们。每个子类模型都需要 django执行INNER JOIN从数据库中获取模型字段。 考虑到这一点,使用子类模型是有正当理由的。 这就是这个图书馆的设计宗旨!

有关详细信息,请参见documentation at Read the Docs

许可证

django多态使用与django相同的许可证(类似于bsd)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用Selenium Java查找筛选器窗格“铅笔图标”的元素时出现问题   分布式缓存l2上使用infinispan和hibernate的java连接锁   使用Java的DOM XML API解析XML中的符号和   java是解析和操作字符串的有效方法   java发布NewRelicMeterRegistry时如何过滤仪表   多维数组在java中读取文件后将数据值分组   java如何将httpClient配置为jsoup   java BreakIterator在Android中是如何工作的?   找不到maven GAE类:原因:java。lang.ClassNotFoundException应用程序标识cRedential$AppenginecRedential包装   Jlabel调整java大小   调试如何在VScode中的java类依赖项中设置断点   java正在获取文件夹名,而不是。mp3文件{Android}   java如何将从DiffieHellman类生成的AES密钥添加到使用该密钥的类