2013-12-16 14 views
1

經過很多困難之後,我設法將之前使用sqlite運行的我的django項目轉換爲使用MongoDB運行。 這很好,除了我的舊版本有一個大規模的initial_data.json文件,現在無法在運行django的syncdb命令時使用新的數據庫。用於使用MongoDB運行的django的initial_data

編輯:

這是initial_data.json文件的例子:

[{"pk":1, 
"model": "vcb.dishtype", 
"fields": { 
    "photo": "images/dishes/breakfast.jpg", 
    "name": "Breakfast" 
    } 
}, 
{"pk":2, 
"model": "vcb.dishtype", 
"fields": { 
    "photo": "images/dishes/bread_and_pastry.jpg", 
    "name": "Bread and pastry" 
    } 
    }] 

和運行執行syncdb後我得到:

DeserializationError: Problem installing fixture 'C:\Users..\initial_data.json' : u'pk'

這似乎是一個MongoDB objectId問題以及我如何定義initial_data文件。 我試圖從文件中刪除所有的pks字段,但仍然是相同的錯誤。

編輯

我試圖把只是兩場比賽,如果我不設置PK,我得到了同樣的錯誤如上。如果我把它,我得到:

"DatabaseErroe: Problem installing fixture 'C:..\initial_data.json': could not load vcb.dishtype(pk=1): AutoField (default primary key) values must be strings representing an ObjectId on MongoDB (got u'1' instead)".

這是一個類似問題,我與Django的網站,這是與該線程的幫助下解決了:Django MongoDB Engine error when running tellsiteid

這引起了我的懷疑,有一個不同的方法來設置這個基礎設施中的燈具。也許syncdb不是要走的路,而且應該有一種轉儲可能?

我搜索谷歌,並沒有什麼似乎解決這個問題。我顯然在問錯誤的問題。

我應該怎麼做,在我修改的項目中創建燈具?

非常感謝, Nitzan

+0

你嘗試了什麼,你得到了什麼錯誤信息等等?請給出更具體的上下文,這樣我們可以幫助你。 – favoretti

+0

@favoretti我編輯了我的帖子。 Tnx爲你的時間 – nitzanwe

+0

我看到的一件事,與Django的initial_data文件不同,django應該根據自己的文檔(https://docs.djangoproject.com/en/1.5/howto/initial-data/)吞下的是你的JSON對象不是一個列表。 – favoretti

回答

2

從你的錯誤信息,我假設你正在使用Django MongoDB Engine

pk值必須是有效的ObjectID,請嘗試使用類似的值:

  • '000000000000000000000001'
  • '000000000000000000000002'

你可以得到的ObjectID或檢查你有正確的值:

>>> from bson.objectid import ObjectId 
>>> ObjectId() 
    > ObjectId('52af59bac38f8420734d064d') 
>>> ObjectId('000000000000000000000001') 
    > ObjectId('000000000000000000000001') 
>>> ObjectId('bad') 
*error* 
+0

非常感謝你! :) – nitzanwe