【问题标题】:Django include models.py from project to multiple appsDjango将models.py从项目包含到多个应用程序
【发布时间】:2014-07-08 09:10:22
【问题描述】:

我想知道是否有一种方法可以将模型.py 从项目目录包含/导入到多个应用程序,而无需在每个应用程序中复制模型。谢谢!

【问题讨论】:

  • 您能解释一下为什么需要这个吗?我不太清楚您所说的“包含/导入”是什么意思。
  • 好吧,我的项目中可能有 5-6 个应用程序。而且我不想复制我的应用程序中的每个模型。我想知道的是,如果您可以直接从项目文件夹中导入 models.py。
  • 嗯,你试过了吗?发生了什么?我在这里没有看到任何困难的问题......
  • 是的,我试过了。它给了我“没有名为 xxxxxx.models 的模块”。你能解释一下你会怎么做吗?谢谢!
  • @LudwikTrammer 感谢您的回复。我已经看过了。我确实在应用程序中正确地划分了我的项目。猜测是不可能的。正在寻找像“从 projectname.models 导入产品”这样的东西来写在我的应用程序的一个 view.py

标签: python django django-models import


【解决方案1】:

每个应用程序的应用程序文件夹中都必须有自己的models.py。您的应用程序文件夹中有models.py,您可以在项目的任何文件中编写以下导入语句:

from myapp.models import model_to_import

如果您在任何 app 文件夹或任何其他文件夹之外有 models.py,请确保该文件夹包含一个(带两个下划线)init(带两个下划线).py 文件,然后在您想要的文件中写入以下内容进口:

from folder_name import models
from models import model_to_import

【讨论】:

  • 谢谢!这就是我一直在寻找的。​​span>
  • 您应该接受解决您问题的答案,因为它可能会帮助其他有类似问题的用户。
【解决方案2】:

您可以创建一个应用,其中包含您在项目范围内需要的任何模型,例如

python manage.py startapp projectcore

然后

from projectcore.models import MyModel

根据需要。

但如果可以的话,最好听 Ludwik 的意见并尝试重组!

【讨论】:

    【解决方案3】:

    您不应该将模型直接放在 Django 中的项目级别。每个模型都必须与特定的应用程序相关联。另一方面,您可以在应用之间导入模型。

    如果您觉得需要项目级别的模型,这只是意味着您没有将您的功能正确地划分为应用程序。不应该有任何理由拥有“项目级模型”(或“项目级视图”)。您只需将功能拆分为单独的应用即可。

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

    【讨论】:

    • 感谢您的回复!
    • 嗯,我目前正在做一个项目,我有一个模型,它定义了一些其他对象的时间有效性。为简单起见,相同的模型将用于(时间验证)不同的其他模型。想想,f.e. Windows 中的 ACL - 相同的模型,但适用于许多不同的对象(文件系统、数据库等)。我为此使用单独的应用程序,但常识会在其他地方使用。
    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2021-06-04
    • 2010-10-23
    • 2013-09-02
    相关资源
    最近更新 更多