2017-04-03 36 views
0

我想制作一个模型,允许W admin管理站点中的用户选择一个图像目录,在CharField中给出集合的名称,并在按钮上按下具有给定集合的集合名称将被创建,然后来自给定目录的图像将被保存到数据库(以便它们在CMS中可用)。图像的标题是文件名,而标签是图像所在的目录名称。使用python代码创建集合

我发现另一篇文章如何将图像保存到数据库与代码(image saving) 但我有一个问题以编程方式创建集合。我发现这里的代码(from here)应该工作,但显然我没有,当我做manage.py makemigrations,我得到这个错误:

django.db.utils.IntegrityError: UNIQUE constraint failed: wagtailcore_collection.path 

我是否需要提供add_child的路径?它应该是什么样的路径? 感谢您提前提供任何帮助!

root_coll = Collection.get_first_root_node() 
root_coll.add_child(name='testcoll') 
+0

请您显示IntegrityError的完整堆栈跟踪?我有点困惑,为什么会发生'makemigrations'步骤... – gasman

+0

请在err_trace.log中找到完整的错误消息[link](https://github.com/lazmol/wagtail-imageloader)。 model.py在那里,请注意我对W really是非常新奇的,所以任何帮助都是值得欢迎的! – Lazlo

+0

只是一个编码相关的问题:它是如何工作的Image对象可以像这样实例化:Image(title =“Image title”,file = ImageFile(image_file,name =“image-filename.jpg”))?当我看看[类定义](https://github.com/wagtail/wagtail/wagtail/blob/master/wagtail/wagtailimages/models.py)时,我没有看到任何__init__方法,但是这些(标题,文件)是由Image继承的AbstractImage类的类变量。那么如何在实例化Image时将这些用作参数,以及为什么没有__init__? – Lazlo

回答

1

的问题是,你直接的GalleryPage定义范围内运行的代码:

class GalleryPage(Page): 
    # test 
    root_coll = Collection.get_first_root_node() 
    root_coll.add_child(name='testcoll') 

这将运行每models.py加载时间 - 尤其在./manage.py makemigrations./manage.py migrate命令需要加载models.py以了解如何设置数据库。创建数据库对象自然会失败,因为数据库还没有准备好......

运行这样的测试代码的最佳位置可能是./manage.py shell命令行,您应该能够运行它以下行成功:

from wagtail.wagtailcore.models import Collection 
root_coll = Collection.get_first_root_node() 
root_coll.add_child(name='testcoll')