【问题标题】:Django project models.py versus app models.pyDjango 项目 models.py 与应用程序 models.py
【发布时间】:2011-02-06 07:58:36
【问题描述】:

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

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

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

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

提前致谢。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

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

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

    另请参阅 DjangoCon 2008 的 James Bennett's "writing reusable Django applications" presentation

    【讨论】:

    • 非常有趣和有教育意义的演讲!詹姆斯还提到,世界在线网站只有settings.pyurls.py。其余的都是apache的python路径下的可复用应用。
    【解决方案2】:
    • 一个模型只能在 Django 项目中定义一次

    • 模型需要存在于项目下的一个app中

    • 您可以通过导入其他应用的模型来访问它们

    • 如果您需要“添加”到现有模型,可以继承它(请参阅:multi table inheritance)。这相当简单,但如果您刚刚开始,您可能希望将其留到以后。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-21
        相关资源
        最近更新 更多