Python导入时出错

时间:2016-01-29 10:39:05

标签: python django django-models import python-import

我有问题:

我正在使用此套餐:https://github.com/ulule/django-badgify

它完美无缺,但现在我需要创建自定义模型徽章。我已经完成了所有工作,例如文档:

main.models.py:

from badgify.models.base.badge import Badge as BaseBadge

class GuidaBadge(BaseBadge):
    class Meta(BaseBadge.Meta):
        abstract = False

settings.py:

BADGIFY_BADGE_MODEL = "main.models.GuidaBadge"

但它会导致错误:

  File "D:\virtenvs\codeguida\codeguida\main\models.py", line 11, in <module>
    from badgify.models.base.badge import Badge as BaseBadge
  File "D:\virtenvs\codeguida\lib\site-packages\badgify\models\__init__.py", line 8, in <module>
    Badge = load_class(settings.BADGE_MODEL)
  File "D:\virtenvs\codeguida\lib\site-packages\badgify\utils.py", line 88, in load_class
    raise exceptions.ImproperlyConfigured(txt)
django.core.exceptions.ImproperlyConfigured: Backend module "main.models" does not define a "GuidaBadge" class.

https://github.com/ulule/django-badgify/blob/master/badgify/utils.py#L79

似乎Python无法找到&#34; GuidaBadge&#34;类。所以我试图在shell中使用函数load_class() - 它返回右类......

我认为错误的原因是这样的:

正如我们在Traceback中所看到的,首先是:

File "D:\virtenvs\codeguida\codeguida\main\models.py", line 11, in <module>
        from badgify.models.base.badge import Badge as BaseBadge

程序要求python从badgify包中导入Badge

然后Python尝试导入它,并遇到

File "D:\virtenvs\codeguida\lib\site-packages\badgify\models\__init__.py", line 8, in <module>
        Badge = load_class(settings.BADGE_MODEL)

这里程序要求python从字符串中加载load_class(存储在设置中,例如&#39; main.models.GuidaBadge&#39;)

但是Python还没有运行这部分模型。并且它导致错误,没有类&#34; GuidaBadge&#34;在&#34; main.models&#34;。

我是对的吗?

如何解决?

2 个答案:

答案 0 :(得分:1)

不要做

from badgify.models.base.badge import Badge as BaseBadge

代替

import badgify.models.base.badge

class GuidaBadge(badgify.models.base.badge.Badge):
    class Meta(BaseBadge.Meta):
        abstract = False

“from”和“as”导入由于命名空间更改而导致循环性问题(导入的模块未被识别为原始模型,因为它被导入为不同的命名空间)。

答案 1 :(得分:1)

  

main.models.py:

您的文件是以这种方式命名的还是位于models.py目录中的main?如果是第一个,请将其更改为第二个。

还要检查主目录中是否有__init__.py文件,并且主目录位于python路径中。