跨应用程序使用 django 模型?

Posted

技术标签:

【中文标题】跨应用程序使用 django 模型?【英文标题】:Using django models across apps? 【发布时间】:2011-01-04 11:47:09 【问题描述】:

所以在我的 Django 项目中,我有几个不同的应用程序,每个应用程序都有自己的模型、视图、模板等。让这些应用程序通信的好方法(“Django”方式)是什么?

一个具体的例子是一个会议应用程序,它有一个会议模型,我有一个主页应用程序,我想在主页上显示前 5 个会议。

Home 应用程序的视图是否应该只查询会议应用程序的模型?

感觉这是越界了,在 Django 中可能有一种更解耦的方式来做这样的事情。

【问题讨论】:

Sharing models between Django apps 的可能重复项 【参考方案1】:

对于您的具体示例,我将使用 Django templatetag

在您的会议应用程序中有一个模板标签“display_top_meetings”,并从您的索引模板中使用 display_top_meetings 5 调用它,首先加载它。

您可以在此处阅读有关模板标签的更多信息:

Django Official documentation about TemplateTags

B-List's article on writting 'better template tags'

希望对你有所帮助!

【讨论】:

【参考方案2】:

尽可能做到解耦,

您需要有一个特定于项目的应用程序,它可以完成彼此之间的所有连接。

使用来自模型的信号在解耦的应用程序中创建新模型会有所帮助。但是这样做太多,是愚蠢的。

【讨论】:

【参考方案3】:

如果是我,我会在您的会议应用程序中制作一个模板标签,以产生所需的输出,并将该模板标签包含在家庭应用程序的模板中。

这样,您只需将它们耦合到 MVC 的视图部分,并且如果您在会议应用程序中更改模型,则更易于维护。

【讨论】:

【参考方案4】:

是的。我认为这是一个设计特点。所有模型共享一个后端,因此您必须做额外的工作才能在不同的应用中拥有两个同名的模型。

项目不应共享模型

【讨论】:

【参考方案5】:

Home 应用的 View 是否应该只查询 Meetings 应用的模型?

是的,就是这样。如果你真的想解耦,你可以让你的 Home 应用程序使用通用外键和某种通用模板系统,但是没有一个很好的理由,除非你有宏伟的计划让你的家庭应用程序是可插入的并且与许多其他不同的 Django 应用程序一起工作。

编写紧密耦合的 Django 应用程序真的很容易,而编写解耦的 Django 应用程序真的很难。除非你有理由,否则不要解耦,你会为自己节省很多工作(和快乐!)。

【讨论】:

“编写紧密耦合的 Django 应用程序真的很容易,而编写解耦的 Django 应用程序真的很难”——我听到你在这里说的话......“除非你有理由,否则不要解耦,并且您会为自己节省大量工作”——这是否违反了保持系统尽可能松散耦合(首先)的合理软件工程原则?【参考方案6】:

在某些时候,您的应用程序必须耦合才能完成任何工作。你无法解决这个问题。

【讨论】:

以上是关于跨应用程序使用 django 模型?的主要内容,如果未能解决你的问题,请参考以下文章

跨多个模型定义关系 - Django

django模型系统--多对多,一对一以及跨表查询

解决跨域问题以及Django中POST传递参数错误

如何解决 Django 中跨数据库的外键支持不足的问题

跨线程共享 django 事务

使用 Django REST 框架跨微服务共享数据库关系