Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以在django项目中拥有一个主模型文件吗?_Python_Django_Organization_Project Organization - Fatal编程技术网

Python 我可以在django项目中拥有一个主模型文件吗?

Python 我可以在django项目中拥有一个主模型文件吗?,python,django,organization,project-organization,Python,Django,Organization,Project Organization,问题 我正在从事一个django项目,在该项目中,我需要在多个应用程序上共享相同的数据库模型,例如,当用户打开一个页面时,页面将根据用户设置显示,用户可以在不同的应用程序中更改,而不是在显示页面的应用程序中更改 目前,我已经制作了一个浏览器应用程序,其中包含了我大部分的模型(因为这是我开始使用的一个),我还有其他应用程序,如watch\u file和user\u settings,然后导入 这是可行的,但我注意到我遇到了组织问题,我从一个文件跳到另一个文件来检查模型,我到处导入 我的潜在解决方案

问题

我正在从事一个django项目,在该项目中,我需要在多个应用程序上共享相同的数据库模型,例如,当用户打开一个页面时,页面将根据用户设置显示,用户可以在不同的应用程序中更改,而不是在显示页面的应用程序中更改

目前,我已经制作了一个浏览器应用程序,其中包含了我大部分的模型(因为这是我开始使用的一个),我还有其他应用程序,如
watch\u file
user\u settings
,然后导入

这是可行的,但我注意到我遇到了组织问题,我从一个文件跳到另一个文件来检查模型,我到处导入

我的潜在解决方案

我在考虑在某个地方制作一个大的模型文件,然后将每个应用程序所需的模型导入到它自己的模型文件中,然而,我在评论中看到有人说,通常这是不可能的

我还提到,就组织而言,在应用程序之间共享模型根本不是一个好主意

问题

考虑到为我的项目使用的所有模型创建一个通用模型文件不是一个好主意,我该如何组织它,这样我就不必从不同的文件导入这么多模型,应用程序才能工作

我是否可以创建一个类似于助手的应用程序,它不显示,但仅用于帮助其他应用程序,方法是将所有模型放在它的
models.py
文件中,然后从其他应用程序中的此处导入它

NB:在下面提到“应用程序”时,我指的是“特定于项目的应用程序”,而不是“可重用的应用程序”

具有包间依赖关系(Django“apps”首先也是最重要的python包)是完全合法的(技术上),并且在任何非平凡的项目中都难以避免,因此让一个应用从另一个应用导入模型本身绝对不是问题。问题是当你开始有循环依赖关系时(a依赖于B,B依赖于C,C依赖于a…)

一个通常运行良好的模式是,有一个“核心”应用程序,所有其他应用程序都可以依赖,但不能依赖任何其他应用程序(当然,除了contribs应用程序或第三方应用程序),还有一个“主”应用程序,可以依赖任何应用程序,但不允许任何其他应用程序依赖。核心应用程序为您的项目提供了“基础”——所有项目都需要的基本构建块——而主应用程序(通常根本没有模型)负责所有事情的“顶级集成”(注意,它是您将不明显属于另一个应用程序和“桥梁”的所有东西放在一起的地方其他应用程序(包括所有功能)

然后,你尝试保持其他应用程序基本上是独立的,除了对contribs应用程序、第三方应用程序和核心应用程序的依赖


还要注意的是,一个应用不一定要有模型、视图、模板和模板标签等——你可以有定义几个模型或UTIL的简单应用,一个负责所有项目视图的“前端”应用(在概念上与“主”应用类似),一个“api”应用程序比其他应用程序模型等提供REST api。

感谢您的快速响应!我想我理解你的意思,但是我不明白为什么你需要将主应用程序与核心应用程序分开?为什么不制作一个既能处理其他应用程序使用的模型又能处理它们之间的“桥梁”的应用程序呢?(我对“桥”的理解是,你指的是仅仅连接2个或更多其他模型的模型,比如数据库中的N到M关系,对吗?“我不明白为什么你需要将主应用程序与核心应用程序分开”=>因为核心应用程序是每个人都可以依赖的,而主应用程序是任何人都不允许依赖的。实际上,“桥接”并不是关于具体的模型和关系。我正在开发一个复杂的项目。目前我有很多应用程序,每个应用程序都高度依赖于彼此的模型。那么,有一个“核心”应用程序来保留所有模型(集中化模型)以避免将来的迁移依赖性可以吗?示例:app_a/views.py和app_b/views.py将导入core.a_模型和core。b_模型@brunodesthuilliers@TianLoon如果“每个应用程序都高度依赖于彼此的模型”,那么您肯定希望将所有这些重构为一个应用程序(或者根据您的确切依赖关系重构为几个应用程序)。一般来说,只要两个模块或包相互依赖,您就要将它们重构为单个模块/包,或者将相关部分提取为第三个不同的模块/包(取决于上下文中的意义)。