我正在学习Django,我试图了解models.py在项目中的使用与应用程序的对比。从教程中的例子来看,我在应用程序中包含了一个模型定义,但是当我将这些知识应用到我自己的现有数据库时,我陷入了困境。
我使用了一个数据库(当然是一个副本),并使用inspectdb将概念模式作为django模型生成。我在项目级完成了这项工作,然后假设我可以在该项目的应用程序中使用子模式编写应用程序。
但是概括教程,他们在应用程序的model.py中定义了模型。如果我这样做了,我会重复已经在项目级的模型(或其中的一部分),这看起来是一个错误和维护问题。
那么,在Django风格中,我如何使用项目模式(或其部分),而不在应用程序的models.py中重新定义它呢?
提前谢谢。
在Django项目中,模型只应定义一次
该模型需要存在于项目下的应用程序中
您可以通过导入其他应用程序的模型来访问它们
如果需要“附加”到现有模型,则可以从中继承它(请参见:multi table inheritance)。这是相当简单的,但如果你只是刚开始,你可能想留下来晚些时候。
不应该有任何理由使用“项目级模型”(或“项目级视图”)。你只需要把功能分成不同的应用。
假设你正在为一所学校设计一个内部网网站。你将拥有一个处理学生帐户的应用程序,另一个生成时间表的应用程序,还有一个用于内部留言板等。。每个应用程序都定义自己的模型(没有“项目级模型”),但应用程序可以相互导入模型(因此留言板帖子可以有一个外键字段指向“学生”应用程序中的学生)。
另见DjangoCon 2008的James Bennett's "writing reusable Django applications" presentation。
Django模型只能驻留在应用程序中,而不能驻留在项目本身中。默认情况下,
manage.py inspectdb
输出models.py
文件的内容,并由您将其放在正确的位置。在你的情况下,将整个东西放在一个应用程序中,然后将其拆分到有意义的地方会更容易。
我不确定当前版本的状态是什么,但在包中出现
models
模块之前,这表明这是django应用程序,可以放在INSTALLED_APPS
列表中。在Django项目中,模型只应定义一次
该模型需要存在于项目下的应用程序中
您可以通过导入其他应用程序的模型来访问它们
如果需要“附加”到现有模型,则可以从中继承它(请参见:multi table inheritance)。这是相当简单,但如果你只是刚开始,你可能想留下来晚些时候。
相关问题 更多 >
编程相关推荐