Исходные_данные для 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*
Другие вопросы по тегам