【问题标题】:Django relationships between apps: How to keep apps separate?应用程序之间的 Django 关系:如何保持应用程序分离?
【发布时间】:2012-12-05 03:04:05
【问题描述】:

我需要在一个 Django 项目中连接两个应用程序,但不想将模型从一个导入另一个。保持它们“干净”将使我以后可以单独重复使用它们。

在这种特殊情况下,我需要在这些单独的应用程序中的两个模型之间建立多对多关系。一种解决方案是在主项目应用程序中创建一个模型,为两者定义外键。这是Django的方式还是有更好的解决方案?

【问题讨论】:

标签: django database-design django-admin


【解决方案1】:

也许您正在寻找一种Mediator Pattern。如果您的应用不需要相互了解,一种方法可以是编写另一个可以同时了解两者的应用。

【讨论】:

  • 是的,当我说我可以在主项目应用程序中放置一个模型时,我就是这么想的。但我想我找到了更好、更 Django 风格的东西:proxy model inheritance。这样,我可以保持基础应用程序清除任何与项目相关的依赖项,从而可重用,并将它们放入具有代理模型的“派生”应用程序中。当然,我需要在 settings/INSTALLED_APPS 中将基础应用与派生应用交换。
【解决方案2】:

django-profiles、django-sorl、django- 都以“多对一”类型的关系工作。当您选择使用这些插件/应用程序(和其他)时,您最终将使您设计的应用程序依赖于它们的存在。

选项 1: 考虑到上述情况......使您打算设计的应用程序之一足够通用,以使依赖关系只有一种方式(因此,其他应用程序将依赖它,但不会反过来)。这是大多数 django 应用程序已经做的。

选项 2: 如果您的每个应用程序之间共享一个依赖项,那么您可能会让您的生活变得轻松很多,只需将其保留在同一个应用程序/插件中即可。

【讨论】:

  • 谢谢 - 是的,如果我弄脏了我的项目特定应用程序,我不介意,只是通用应用程序应该保持干净。我测试了代理机制,它完全符合我的需求,即我可以通过依赖于其他应用程序的部分来扩展我的通用应用程序。这就像应用程序的继承,而不会弄脏底层数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2014-12-16
  • 2010-10-16
  • 2018-02-26
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
相关资源
最近更新 更多