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

BRH*_*HSM 2 python django project-organization organization

问题

我正在开发一个 django 项目,其中我需要在多个应用程序上共享相同的数据库模型,例如,当用户打开页面时,页面会根据用户设置显示,用户可以在不同的应用程序中更改这些设置比显示页面的那个

此刻,我所做的浏览应用程序包含我的模型的最多(因为它是我开始的那个)和我有其他的应用程序,如watch_fileuser_settings,然后导入

这是有效的,但我注意到我遇到了组织问题,我从一个文件跳到另一个文件以检查模型并且我正在到处导入......

我的潜在解决方案

我正在考虑在某处制作一个大模型文件,然后在它自己的模型文件中导入我需要的每个应用程序的模型,但是,我读到了这个问题,其中有人在评论中表示通常不会这样做

我还红色这个问题,它说在应用程序之间共享模型在组织方面根本不是一个好主意

问题

关于为我的项目正在使用的所有模型制作通用模型文件不是一个好主意,我将如何组织它以便我不必从不同的文件中导入这么多模型以使应用程序工作?

我可以创建一个类似帮助应用程序的东西,它不显示但仅用于通过将所有模型都放在models.py文件中并从此处导入其他应用程序来帮助其他应用程序吗?

bru*_*ers 5

注意:在下面谈论“应用程序”时,我的意思是“特定于项目的应用程序”,而不是“可重用的应用程序”。

这是完全合法的(技术上)并且在任何非平凡的项目中几乎都无法避免具有包间依赖关系(Django“应用程序”首先是 Python 包),因此让一个应用程序从另一个应用程序导入模型绝对不是问题通过它自己。当你开始有循环依赖时就会出现问题(A 依赖于 B 依赖于依赖于 A 的 C ......)

通常工作正常的模式是拥有一个“核心”应用程序,所有其他应用程序都可以依赖该应用程序但不得依赖任何其他应用程序(当然除了 contribs 应用程序或第三方应用程序),以及一个“主”应用程序可以依赖任何应用程序,但不允许其他应用程序依赖。核心应用程序为您的项目提供了“基础”——所有项目都需要的基本构建块——而主应用程序(通常根本没有模型)负责一切的“顶级集成”(IOW,它是您将所有不属于另一个应用程序的内容放在一起,并将其他应用程序的功能“桥接”在一起)。

然后你尝试保持其他应用程序大部分是自包含的,除了对 contribs 应用程序、第三方应用程序和核心应用程序的依赖。

另请注意,应用程序不一定具有模型和视图和模板和模板标签等 - 您可以使用简单的应用程序定义几个模型或实用程序,一个“前端”应用程序(实际上在某种程度上类似于“主”应用程序)负责您项目的所有视图,“api”应用程序在您的其他应用程序模型上提供 REST api,等等。