有人能帮我理清syncdb和导入循环的困惑吗,"导入必须明确吗?

2 投票
1 回答
653 浏览
提问于 2025-04-15 18:21

我在用Python2.5构建数据库时遇到了很多麻烦,使用syncdb这个命令的时候总是出问题。我觉得问题可能出在我用通配符*来导入forum.models,这样似乎导致了循环引用。

>>> import settings  
>>> from forum.managers import QuestionManager, TagManager, AnswerManager, VoteManager, FlaggedItemManager, ReputeManager, AwardManager  
Traceback (most recent call last):  
  File "<console>", line 1, in <module>  
  File "/home/username/webapps/username/sousvide_app/forum/managers.py", line 6, in <module>  
    from forum.models import *  
  File "/home/username/webapps/username/sousvide_app/forum/models.py", line 18, in <module>  
    from forum.managers import QuestionManager, TagManager, AnswerManager, VoteManager, FlaggedItemManager, ReputeManager, AwardManager  
ImportError: cannot import name QuestionManager  
>>> from forum.models import Question, Tag  
>>> from forum.managers import QuestionManager, TagManager, AnswerManager, VoteManager, FlaggedItemManager, ReputeManager, AwardManager  
>>> import sys, pprint  
>>> pprint.pprint(sys.path)  
['/home/username/webapps/username/sousvide_app',  
 '/home/username/webapps/username/lib/python2.5',  
 '/home/username/lib/python2.5/markdown2-1.0.1.16-py2.5.egg',  
 '/home/username/lib/python2.5/html5lib-0.11.1-py2.5.egg',  
 '/home/username/lib/python2.5',  
 '/usr/local/lib/python25.zip',  
 '/usr/local/lib/python2.5',  
 '/usr/local/lib/python2.5/plat-linux2',  
 '/usr/local/lib/python2.5/lib-tk',  
 '/usr/local/lib/python2.5/lib-dynload',  
 '/usr/local/lib/python2.5/site-packages',  
 '/usr/local/lib/python2.5/site-packages/PIL']  
>>> from settings import INSTALLED_APPS  
>>> pprint.pprint(INSTALLED_APPS)  
('sousvide_app.forum',  
 'django.contrib.auth',  
 'django.contrib.contenttypes',  
 'django.contrib.sessions',  
 'django.contrib.sites',  
 'django.contrib.admin',  
 'django.contrib.humanize',  
 'django_authopenid')  

我在另一个安装环境中也遇到过同样的问题,不过我通过明确导入forum.managers里的管理器解决了这个问题。
你可以看到,如果我把Question和Tag模型加载到命名空间中,我就能在命令行中导入这些管理器。

我把从forum.models导入所有内容的方式改成了明确导入:
from forum.models import Question, Tag

但是,我还是无法使用syncdb。当我尝试输出SQL时,系统提示找不到这个应用。
$ python2.5 manage.py sql forum
错误:找不到标签为forum的应用。你确定你的INSTALLED_APPS设置正确吗?

有没有人能告诉我到底出了什么问题?
Python2.5有没有什么特别的地方可能导致这个错误?

1 个回答

0

你是不是在使用 global_settings.pylocal_settings.py,除了 settings.py 之外?

正确的方式来导入Django的设置是使用解耦对象 from django.conf import settings,而不是直接 import settings。你可以在这里查看相关文档:在Python代码中使用设置

我不能确定这是否能解决你的问题,但如果你说你的问题是应用程序没有出现在 INSTALLED_APPS 中,那么确保你的设置被正确加载是朝着正确方向迈出的一步。

撰写回答