Исходные_данные для django, работающего с MongoDB
После многих трудностей мне удалось преобразовать мой проект django, который ранее работал с sqlite, для работы с MongoDB. Это замечательно, помимо того, что в моей старой версии был массивный файл initial_data.json, который теперь не работает с новым db при запуске команды syncdb в django.
РЕДАКТИРОВАТЬ:
это пример файла 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: Проблема с установкой приспособления 'C:\Users..\initial_data.json': u'pk'
Кажется, это проблема с объектным идентификатором MongoDB и тем, как я определил файл initial_data. Я попытался удалить все поля pks из файла, но все равно та же ошибка.
РЕДАКТИРОВАТЬ
Я попытался поставить только два прибора, если я не установил ПК, я получаю ту же ошибку, что и выше. Если я его установлю, я получу:
"DatabaseErroe: проблема с установкой светильника" C:..\initial_data.json ": не удалось загрузить vcb.dishtype(pk=1): значения AutoField (первичный ключ по умолчанию) должны быть строками, представляющими ObjectId на MongoDB (получил u'1' вместо)".
это аналогичная проблема, с которой я столкнулся на сайте django, которая была решена с помощью этой темы: Ошибка движка Django MongoDB при запуске telliteid
Это вызывает у меня подозрение, что есть другой способ установки приборов в этой инфраструктуре. Может быть, syncdb - это не тот путь, и, возможно, должна быть какая-то свалка?
Я искал в Google, и, кажется, ничто не решает эту проблему. Я явно задаю неправильные вопросы.
что я должен сделать, чтобы создать светильники в моем измененном проекте?
Большое спасибо, Ницан
1 ответ
Из вашего сообщения об ошибке я предполагаю, что вы используете Django MongoDB Engine?
Ваш pk
значения должны быть действительными ObjectIds, попробуйте использовать такие значения, как:
- '000000000000000000000001'
- '000000000000000000000002'
- так далее
Вы можете получить ObjectIds или проверить, что у вас есть правильные значения:
>>> from bson.objectid import ObjectId
>>> ObjectId()
> ObjectId('52af59bac38f8420734d064d')
>>> ObjectId('000000000000000000000001')
> ObjectId('000000000000000000000001')
>>> ObjectId('bad')
*error*