我正在尝试在我的项目中安装imagestore应用程序。默认模型创建成功,所有其他部分正常工作。
但是,它有一个扩展基础(抽象)模型的功能,并通过一些复杂的机制创建自己的模型。这是我的模型:
from django.db import models
from imagestore.models.bases.album import BaseAlbum
class Newalbum(BaseAlbum):
title = models.CharField("title", max_length=128)
class Meta(BaseAlbum.Meta):
app_label = "imagestore"
abstract = False
我的设置中还有一个字符串IMAGESTORE_ALBUM_MODEL = 'art.models.Newalbum'
。
当我运行syncdb时,它告诉我后端模块“art.models”没有定义“Newalbum”类。 ('module'对象没有属性'Newalbum')。
但当然它定义了。
陌生感才刚刚开始。当我将调试语句放在imagestore试图获取我的模型的地方时,它会打印正确的模块(已导入)和正确的类名(字符串)。但! dir(mod)
仅打印“from imagestore.models.bases.album import BaseAlbum”之前出现的变量。在上面的示例中,仅显示“models”和默认的下划线属性。为什么?关于导入模块,我不知道什么?
我已经尝试将它安装在许多设置属性,django(和所需应用程序)版本,app_label等的笨拙组合中。当我在我的设置中没有添加IMAGESTORE_ALBUM_MODEL时,它会创建表,但是这个模型没有任何BaseClass的行为。 那么,我做错了什么?
答案 0 :(得分:1)
解决了!逐步完成导入过程(我将以下内容添加到imagestore.utils.load_class)
import pdb
pdb.set_trace()
我发现有一个循环导入。这是事物的顺序(略微简化):
快速解决方案是将head字段移动到models.album.Album并将其从BaseAlbum中删除。在这样做后,我能够让网站再次运行。您必须在新应用中使用模型包(不是简单的models.py),将Image和Album放在单独的文件中。
如果这还不够清楚,请告诉我一行,我会尽力做得更好。