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

问题描述 投票:0回答:2

问题

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

目前我已经制作了包含我的大部分模型的浏览器应用程序(因为它是我开始的那个)我还有其他应用程序,如

watch_file
user_settings
然后导入

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

我的潜在解决方案

我正在考虑在某个地方制作一个大模型文件,然后只在它自己的模型文件中导入我需要的每个应用程序的模型,但是,我读到this question评论中有人说通常这没有完成

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

问题

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

我可以创建一个类似助手应用程序的东西,它不显示但仅用于帮助其他应用程序,方法是将所有模型放在它的

models.py
文件中并从此处导入其他应用程序吗?

python django organization project-organization
2个回答
8
投票

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

在任何非平凡项目中具有包间依赖性(Django“应用程序”首先是最重要的 python 包)是完全合法的(技术上)并且几乎无法避免,因此让一个应用程序从另一个应用程序导入模型绝对不是问题和自己。问题是当你开始有循环依赖时(A 依赖于 B,B 依赖于 C,C 又依赖于 A...)

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

然后,除了对贡献应用程序、第三方应用程序和核心应用程序的依赖性之外,您尝试让其他应用程序保持大部分独立。

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


0
投票

如果按照上面的建议将分布在多个应用程序中的模型重构为一个“中央”应用程序,那么如何编写迁移?我假设自动化脚本跟不上模型改变它们的位置

完全不同,我发现我不能将应用程序称为“主”。除了永远不会创建模型之外,一切正常。有谁知道这是为什么吗?

© www.soinside.com 2019 - 2024. All rights reserved.