问题
我正在处理一个django项目,在这个项目中,我需要在多个应用程序上共享相同的数据库模型,例如,当用户打开一个页面时,页面将根据用户设置显示,用户可以在不同的应用程序中更改该页面,而不是显示页面的应用程序。
目前,我已经制作了一个浏览器应用程序,它包含了我的大多数模型(因为它是我开始使用的),我还有其他的应用程序,比如watch_file和user_settings,然后导入
这是可行的,但我注意到我遇到了组织问题,我在一个文件又一个文件地检查模型,并且在整个地方导入.
我的潜在解决方案
我正在考虑在某个地方创建一个大的模型文件,只是导入它自己的模型文件中的每个应用程序所需的模型,但是,我读了this question,在评论中有人说这通常是没有完成的。
我还说过,在应用程序之间共享模型对于组织来说根本不是一个好主意。
问题
对于为我的项目正在使用的所有模型创建一个通用模型文件并不是一个好主意,我将如何组织它,这样我就不必从不同的文件中导入这么多模型才能运行?
我是否可以创建一个类似助手应用程序的东西,它没有显示,但只用于帮助其他应用程序,在它的models.py文件中包含所有模型,并在其他应用程序中导入frome?
发布于 2017-12-13 16:18:46
注意:在下面提到“应用程序”时,我指的是“特定于项目的应用程序”,而不是“可重用的应用程序”。
在任何不平凡的项目中,拥有包间依赖关系(Django“app”首先是python包)是完全合法的,也是不可避免的,因此,让一个应用程序从另一个应用程序导入模型本身绝对不是一个问题。当你开始有循环依赖(A依赖于B,依赖于C,依赖于A.)
一个通常运作良好的模式是拥有一个“核心”应用程序,所有其他应用程序都可以依赖,但不能依赖任何其他应用程序(当然,除了cont肋骨应用程序或第三部分应用程序),以及一个“主”应用程序,它可以依赖任何应用程序,但其他应用程序不允许依赖。核心应用程序为您的项目提供了“基础”--所有项目都需要的基本构建块--而主应用程序(它通常根本没有模型)负责所有东西的“顶级集成”(IOW --它是将所有不明显属于另一个应用程序的东西和其他应用功能“桥梁”放在一起的地方)。
然后,你试着保持其他应用程序大部分是独立的,除了依赖控制应用程序,第三方应用程序和核心应用。
还要注意的是,应用程序不一定有模型和视图、模板和模板等等--您可以使用简单的应用程序来定义几个模型或应用程序,一个“前端”应用程序(在某种程度上类似于概念上的“主”应用程序),它负责您所有项目的视图,一个提供REST api的应用程序,等等。
https://stackoverflow.com/questions/47796992
复制相似问题