Django project models.py与app models.py

2024-05-13 18:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

提前谢谢。


Tags: 项目djangopy模型数据库应用程序定义models
4条回答
  • 在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)。这是相当简单,但如果你只是刚开始,你可能想留下来晚些时候。

相关问题 更多 >