我正在使用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, []
如何从其他应用程序“ mainsite”中引用此类?我将其放在主站点中一个文件的顶部。
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
答案 0 :(得分:3)
尝试from common.model_utils import RawCol
代替from common import RawCol
您始终需要指定要导入的确切.py文件(不带.py结尾)。
如果仍然无法使用,则可能是循环导入问题。
如果您尝试将mainsite.model中的某些内容导入common.model_utils中,或者相反,则将创建一个不可能的导入循环。
您可以通过创建单独的文件(例如common / dependent_model.py)并仅在其中放置RawCol()类而无需从主站点导入来解决此问题。这样,两个文件就不会互相导入(这是行不通的)。