【问题标题】:Sharing Django Models with Foreign Fields across apps跨应用程序与外部字段共享 Django 模型
【发布时间】:2015-02-16 04:44:31
【问题描述】:

我有一个 Django 项目,其中包含两个几乎相同的应用程序,但出于多种原因,我想将它们分开。为了保持干燥,我创建了一个 base_model 文件。

# base_model.py
from django.db import models

class ModelOne(models.Model):
    name = models.CharField()

class ModelTwo(models.Model):
    name   = models.CharField()
    friend = models.ForeignKey(ModelOne)

我的两个应用程序分别称为 app1 和 app2。

我如何导入这些模型,以便基本上我将有 4 个表用于这两个模型?

谢谢。

更新 1

我需要这两个模型的两个版本的原因是我想将它们保存在单独的数据库中,因为它们有不同的用途。

例如,假设我拥有一间带家具的房子和一家家具店。我想为两套家具保留一个单独的清单。我家中的家具将保存在家庭服务器上,而我的商店家具将保存在工作服务器上。另外,我还想跟踪家具的颜色,这样会是一个单独的表格。

# base_model.py
from django.db import models

class Color(models.Model):
    name = models.CharField()

class FurnitureBase(models.Model):
    name   = models.CharField()
    color  = models.ForeignKey(Color)

对于商店应用,我需要跟踪定价、制造商等。对于家庭应用,我需要跟踪使用情况、年龄等。

【问题讨论】:

  • 您需要在此处提供更多上下文。为什么他们需要分开?

标签: django django-models dry


【解决方案1】:

这两个模型应该在Meta下定义为abstract = True。然后在您的两个应用程序中的每一个中,子类以在每个应用程序中创建具体版本。比如:

app1/models.py:

class App1ModelOne(base_models.ModelOne):
    pass


class App1ModelTwo(base_models.ModelTwo):
    pass

阅读 django 文档中的抽象基类和模型继承以获取更多信息:https://docs.djangoproject.com/en/1.7/topics/db/models/#abstract-base-classes

【讨论】:

  • 啊,是的,我没看到。您必须在每个具体实现上复制该 FK 关系。
  • 作为 FK 复制 OP 的替代方法,可以使用通用关系。但正如@lego-stormtroopr 指出的那样,我们不知道任务的上下文。
猜你喜欢
  • 2011-05-07
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 2011-01-04
相关资源
最近更新 更多