首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不同的Django应用程序中共享和专门化基本模型?

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

Stack Overflow用户
提问于 2016-02-03 15:48:28
回答 2查看 420关注 0票数 0

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

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

  • 共同的部分,将由所有的集合共享。
  • 每个集合类型不同的专门化。

示例

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

公共部分

代码语言:javascript
复制
class ItemBase: # ideally abstract
    name = CharField()

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

专精于汽车的集合

代码语言:javascript
复制
class ItemSpecialization
    horse_power = Int()

再论问题

问题是我们如何组织代码,以便在不重复其内容的情况下重用公共部分?

我们可以想象,最好将公共部分作为non-installed应用程序,并将每个专用配置作为单独的安装应用程序。但是这会导致Rental具体类出现问题,因为它驻留在公共部分应用程序中。

对我们如何进行有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2016-02-03 15:55:29

它实际上取决于您想要什么,您可以将抽象模型类用于常见的东西,并在专门的模型类中继承它。

否则,如果您真的希望所有公共数据都有一个表,通常能够与其关联,那么您将需要专门的模型来与公共模型有关系。它可以是外键,也可以使用模型继承,在这种情况下,所讨论的外键将由django为您管理,但使用起来会更加困难。

票数 0
EN

Stack Overflow用户

发布于 2016-02-03 16:05:16

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

代码语言:javascript
复制
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()

使用此模型层次结构,您可以获取租房或ItemSpecialzation对象,并获得对ItemBase字段的访问权。它基本上是Django模型的OO继承。文档中的更多细节:一个/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35181513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档