我有问题:
我正在使用此套餐: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;。
我是对的吗?
如何解决?
答案 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路径中。