如何在不同的Django应用程序中共享和专门化基本模型?

2024-09-27 21:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在使用Django开发一个集合管理项目,可用于不同类型的集合。在

这个问题很自然地分成两部分:

  • 公共部分,将由所有集合共享。在
  • 专门化,每种集合类型都不同。在

示例

为了进一步说明这一点,让我们在伪代码中举一个简化的例子。在

公共部分

class ItemBase: # ideally abstract
    name = CharField()

class Rental
    item = ForeignKey("Item")
    rented_to_person = CharField()

专为汽车系列

^{pr2}$

问题

问题是我们如何组织代码以允许重用公共部分而不复制其内容?在

我们认为最好将公共部分作为一个未安装的应用程序,并将每个专门的配置作为一个单独的安装的应用程序。但是这会导致Rental具体类的问题,因为它驻留在公共部分应用程序中。在

有什么建议吗?在


Tags: 项目django代码abstract应用程序示例类型class
2条回答

这实际上取决于您想要什么,您可以使用abstract model class作为常见的内容,并从专用模型类中继承。

否则,如果您真的想要一个表来处理所有公共数据,通常能够与之关联,那么您需要您的专用模型与公共模型有关系。它可以是foreign key,也可以使用model inheritance,在这种情况下,有关外键将由django为您管理,但使用起来会比较困难。

听起来你在寻找OneToOneField字段关系。根据您的例子:

class ItemBase:
    name = models.CharField(max_length=50)

class Rental:
    item = models.OneToOneField(ItemBase)
    rented_to_person = models.CharField(max_length=50)

class ItemSpecialization
    item = models.OneToOneField(ItemBase)
    horse_power = models.IntegerField()

使用这个模型层次结构,您可以获取租赁或itemspecialization对象,还可以访问ItemBase字段。这基本上是Django模型的OO继承。更多详细信息请参阅文档:https://docs.djangoproject.com/en/1.9/topics/db/examples/one_to_one/

相关问题 更多 >

    热门问题