当前位置: 首页 > 面试题库 >

无法从Django中的其他应用程序导入模型

东方乐
2023-03-14
问题内容

所以我有2个应用程序在同一个项目中运行。

我的文件结构如下:

/project_codebase
    /project
        __init.py
        settings.py
        urls.py
        wsgi.py
        ...    
    /app1
        ...
    /app2
        ...
    manage.py

因此,出于某种奇怪的原因,我为基本目录使用了不同的名称(即,它以代码库结尾)。希望这不是问题。

在我的 settings.py中 ,我有以下内容:

INSTALLED_APPS = [
    ...

    'app1',
    'app2',
]

好的,所以在我的 models.py(来自app2)中 ,我可以轻松地从app1导入模型from app1.models import *,但是,当我from app2.models import *在我的 models.py(从app1)中使用时
,出现ImportError。

有什么解决办法吗?


问题答案:

这可能是由于 循环导入 问题。为了避免这种情况,您应该 动态加载模型

对于 django(1.7+)的最新版本,请
使用应用程序注册表:

from django.apps import apps
MyModel1 = apps.get_model('app1', 'MyModel1')

对于 较早的Django版本( <1.7)

from django.db.models.loading import get_model
MyModel1 = get_model('app1', 'MyModel1')

注意1: 如果要定义 ForeignKey关系 ,则 不需要单独的import语句
。Django涵盖了以下方面:

如果app1是已安装的应用程序,则应按以下方式定义ForeignKey关系:

# in app2.py
class MyModel2(models.Model):
   mymodel1 = models.ForeignKey('app1.MyModel1')

注意2get_model仅当app1已安装的应用程序和MyModel1要从中导入的模型时,该方法才有效app1

注意3: 请尽量避免使用通配符import(from ... import *),因为这是一种不好的做法。



 类似资料:
  • 我正在Django上做类似ERP的小项目,其中包含不同的应用程序(产品、销售、采购、会计、MRP、...)。其中一些有依赖关系(例如,销售应用程序需要产品应用程序)。 继承或抽象类似乎也是不合适的,因为我不是试图为子产品创建模型,而是在表中现有信息(条目)的基础上进行增长或扩展。 实现这一点的最佳方法是什么?我应该考虑编写自定义迁移操作吗?否则,还有更好的办法吗?谢谢!

  • 从其他应用程序(如 Photoshop、Illustrator、After Effects、Sketch)中导入资源,甚至将图像从 Web 浏览器拖放到 Adobe XD 或将图像从剪贴板粘贴到 Adobe XD 中。 您可以将资源从其他 Adobe 应用程序(例如 Photoshop、Illustrator)和第三方应用程序(如 Sketch)导入 Adobe XD。您可以在 XD 中进一步改进

  • 创建一个基于Django3的全栈项目似乎是最佳实践(或至少一种常用方法),该项目使用特定于项目的Django应用程序(而不是独立的Django应用程序),其结构如下(参见此处): 应用程序(此处:)通过以最基本的形式(没有规则、视图等)集成 和 在另一个应用程序(例如)中使用一个应用程序的逻辑(例如)可以很好地工作(例如通过中的)。 但是,如果我试图在app2的逻辑中访问app1的模型,我会得到。

  • 问题内容: 我似乎无法让Python在子文件夹中导入模块。当我尝试从导入的模块创建类的实例时出现错误,但是导入本身成功。这是我的目录结构: 这是server.py的内容: 和user.py: 错误是:AttributeError:’模块’对象没有属性’用户’ 问题答案: 我相信您需要在Models目录中创建一个名为的文件,以便python将其视为模块。 然后,您可以执行以下操作: 您可以在其中添加

  • 我从用户c##cuongnguyen导出oracle数据库。导出后,我有转储文件,所以我想将此文件导入到另一个用户:mbbank 因此,我运行以下语法: ** imp mbbank/xxxxxx FROMUSER=c##cuongnguyen TOUSER=mbbank file=C:\oracle\export\cuongnguyen-user.DMP; ** 我收到了回复,是关于性格的。 导入

  • 如果我设置,则应用程序在打开使用第三方库的活动时就会开始崩溃。 art/runtime/java_vm_ext.cc:410]JNI检测到应用程序中的错误:调用了JNI NewGlobalRef,但出现了挂起的异常java.lang.NoSuchFielderRror:类“LCOM/nTreaming/nPlayerEngine/nFactory;”或其超类中没有“I”字段“MalFactoryC

  • 这个问题一直让我发疯。我正在尝试从同一目录中的文件导入一个类。PyCharm给了我“未解析引用”错误在中定义。 我发现了这些问题: PyCharm中未解决的引用问题 Py PyCharm显示有效代码的未解析引用错误 使用从兄弟子包导入时未解析的引用 我有以下项目结构: 我已将 src 标记为源根... 我已经设置了“将源根添加到PYTHONPATH”: 我试过文件- 如果我尝试运行它,我在控制台中