【问题标题】:Why can't I reference this class from another app in my Django project?为什么我不能从我的 Django 项目中的另一个应用程序中引用这个类?
【发布时间】:2025-11-28 06:30:01
【问题描述】:

我正在使用 Django 和 Python 3.7。我的项目中有两个应用程序 - common 和 mainsite。通常,我在应用程序的根目录(就在 models.py 旁边)有一个文件“model_utils.py”。它包含此代码

class RawCol(Expression):

    def __init__(self, model, field_name):
        field = model._meta.get_field(field_name)
        self.table = model._meta.db_table
        self.column = field.column
        super().__init__(output_field=CharField())

    def as_sql(self, compiler, connection):
        sql = f'"{self.table}"."{self.column}"'
        return sql, []

如何从我的其他应用程序“主站点”中引用此类?我把它放在主站点中我的一个文件的顶部..

from common import RawCol

但是当我运行一些测试时,我得到了这个错误......

ImportError: cannot import name 'RawCol' from 'common' (/Users/davea/Documents/workspace/mainsite_project/common/__init__.py)

编辑:*目录的项目结构看起来像...

+ common
+ mainsite
+ mainsite_project
+ manage.py
+ templates
+ venv

【问题讨论】:

  • 你能分享一下你的项目结构吗?
  • 嗨,用*结构编辑了我的问题。这是你要我提供的吗?
  • 好像是循环导入的问题。您必须从mainsite 将某些内容导入此应用程序。您能否将您的文件夹结构和部分代码发布到您从mainsite 导入的位置?
  • 我通常会做类似 from Project_name.apps.app_name.model_utils import RawCol.

标签: python django python-3.x import


【解决方案1】:

试试from common.model_utils import RawCol

而不是from common import RawCol

您始终需要指定要从中导入的确切 .py 文件(不带 .py 结尾)。

如果还是不行,可能是循环导入问题。

如果您尝试将 mainsite.model 中的某些内容导入 common.model_utils,反之亦然,您将创建一个不可能的导入循环。

您可以通过创建一个单独的文件(如 common/dependent_model.py)并仅将 RawCol() 类放入其中而不从主站点导入任何内容来解决此问题。像这样,两个文件都没有相互导入(这不起作用)。

【讨论】:

    最近更新 更多