Django项目models.py与app models.py

时间:2010-04-09 20:35:41

标签: python django django-models

我正在学习Django,我正在尝试理解项目中的models.py与应用程序的使用。从教程示例中可以看出,我在应用程序中包含了一个模型定义,但是当我将这些知识应用到我自己现有的数据库时,我就陷入了困境。

我使用了一个我使用的数据库(当然是一个副本)并使用inspectdb生成了一个django模型的概念模式。我在项目级别做了这个,并假设我可以使用该项目的应用程序中的子模式编写应用程序。

但是一般化教程,他们在应用程序的model.py中定义了模型。如果我这样做,我会重复已经在项目级别的模型(或部分模型),这似乎是一个错误和维护问题。

那么,在Django风格中,我如何使用项目模式(或部分模式)而不在应用程序的models.py中重新定义它?

提前致谢。

3 个答案:

答案 0 :(得分:22)

没有任何理由拥有“项目级别模型”(或“项目级别视图”)。您只需将功能拆分为单独的应用程序。

假设您正在为学校设计Intranet网站。你会有一个应用程序来处理学生的帐户,另一个应用程序生成时间表,而另一个应用程序用于内部留言板等。每个应用程序定义自己的模型(没有“项目级模型”),但应用程序可以导入彼此模型(因此留言板帖子可以有一个指向“学生”应用程序中的学生的ForeignKey字段)。

另见DjangoCon 2008的James Bennett's "writing reusable Django applications" presentation

答案 1 :(得分:5)

  • 模型只应在Django项目中定义一次

  • 模型需要存在于项目

  • 下的应用程序中
  • 您可以通过导入来访问其他应用的模型

  • 如果您需要“添加”到现有模型,可以继承它(参见:multi table inheritance)。这很简单,但如果你刚刚开始,你可能想留待以后。

答案 2 :(得分:3)

Django模型只能驻留在应用程序中,而不能驻留在项目本身中。默认情况下,manage.py inspectdb会输出models.py文件的内容,由您决定是否将其放在正确的位置。

在你的情况下,将整个东西放在一个应用程序中然后将其拆分到有意义的地方会更容易。

我不确定当前版本的状态是什么,但在包中存在models模块之前表明这是django应用程序并且可以放在INSTALLED_APPS列表中。