【问题标题】:error importing a model in different django app在不同的 django 应用程序中导入模型时出错
【发布时间】:2013-12-30 19:26:43
【问题描述】:

祝您有一个快乐而富有成效的一年。我有以下 django 项目。

geoedu/
├── geoedu
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
├── geoedu.sublime-project
├── geoedu.sublime-workspace
├── manage.py
├── school
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── tests.py
│   └── views.py
└── student
    ├── __init__.py
    ├── __init__.pyc
    ├── models.py
    ├── models.pyc
    ├── tests.py
    └── views.py

(顺便说一句,我喜欢树命令)。我的学校应用有一个名为 School 的类

class School(models.Model):
    #fields

学生应用程序有一个名为 Student 的模型,该模型具有学校的外键。所以在我的学校/models.py

from school.models import School

class Student(models.Model):
    #name and other personal data fields
    school = models.ForeignKey(School, related_name='school')

所以一个学生只属于一所学校,但某所学校可以有很多学生。但是当尝试执行 sqlall 命令以查看是否一切正常时,我得到一个导入错误

./manage.py sqlall school
ImportError: cannot import name School

./manage.py sqlall student
ImportError: cannot import name School

如果我注释掉外键字段并且导入一切正常。为什么没有看到导入?所有项目文件夹都是使用 django-admin 命令从终端创建的,应用程序使用 manage 命令从头开始创建。

sublime工程文件如下

{
    "folders":
    [
        {
           "follow_symlinks": true,
           "path": "."
        }
   ]
}

【问题讨论】:

  • ForeignKey 的模型更改为'school.School' 怎么样(注意,您也可以使用字符串作为模型名称而不是实际的模型类!)。
  • 它成功了!!谢谢..我知道你可以使用字符串作为模型类,但为什么导入它不起作用?
  • 可能是导入中的一个循环,如果您发布您的school/models.py,可能会告诉您更多信息。
  • 是的......我在学校应用程序中有一个模型,它使用学生作为外键,学生应用程序导入学生类......不喜欢它。也许我需要更好的实施。

标签: python django importerror python-import


【解决方案1】:

原因是您的模型结构中有导入循环。将模型名称 "school.School" 用于 ForeignKey 应该可以解决此问题。或者您可以重新考虑模型的设计。

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2013-04-03
    • 2017-09-30
    • 2023-03-28
    • 1970-01-01
    • 2016-03-07
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多