将模型与应用程序的其余部分分开是一种很好的编程习惯

时间:2012-01-12 00:02:35

标签: python database django model

我的项目包含几个需要以不同方式部署的django应用程序,可能在不同的机器上。然而,这些应用程序通常偶尔需要访问彼此的模型,所以我想要“外化”我的模型,以便可以从任何应用程序更优雅地访问它们。所以我的想法是让目录结构类似于这样:

/ 
+ application1
+ application2
+ models

是否有功能点(代码可维护性除外),因为应用程序可以相互交叉引用?

3 个答案:

答案 0 :(得分:4)

django book中的以下段落让我觉得这可能不是一个好主意(我添加了粗体格式):

  

但是,关于应用程序约定有一个要求:如果您使用的是Django的数据库层(模型),则必须创建一个Django应用程序。 模特必须存在于应用内。因此,为了开始编写我们的模型,我们需要创建一个新的应用程序。

答案 1 :(得分:3)

以下内容不适合@ jcollado答案的评论,所以我会把它放在这里:

https://docs.djangoproject.com/en/dev/topics/db/models/#models-across-files

  

跨文件的模型

     

将模型与另一个应用程序中的模型相关联是完全可以的。为此,请在包含模型的模型顶部导入相关模型。然后,只需在需要的地方引用其他模型类。例如:

from geography.models import ZipCode

class Restaurant(models.Model):
    # ...
    zip_code = models.ForeignKey(ZipCode)

答案 2 :(得分:2)

我不认为这是一个特别好的主意,虽然我可以看到吸引力。如果您只想安装其中一个应用程序,那么您将包含很多未使用的模型。我认为最好将模型保存在与他们最相关的应用程序中。

这也可能使管理界面更加混乱。你在哪里注册模特管理员?您在哪里为模型进行管理员自定义?