2017-04-03 76 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')