django не загружает начальные фикстуры во время syncdb

У меня есть проект django со следующей структурой:

/djninja # project dir
  /djninja # main app dir
  /bands # app dir
  /fans # app dir
  /lyrics # app dir

Я создал файл initial_data.yaml для загрузки syncdb фикстур (я предпочитаю формат YAML). Согласно документации, я должен поместить его в любой подкаталог приложения fixtures . Так я и сделал, у меня было:

/djninja
  /djninja
  /bands
    /fixtures
      - initial_data.yaml
  /fans
  /lyrics

Но syncdb пропускал файл. Затем я переместил его в основной каталог проекта:

/djninja
  /djninja
    /fixtures
      - initial_data.yaml
  /bands
  /fans
  /lyrics

И до сих пор его опускают. Я хочу загрузить приборы с помощью команды syncdb Что я делаю неправильно?


person ducin    schedule 14.03.2013    source источник
comment
Вы установили yaml, чтобы python распознал это как приспособления?   -  person catherine    schedule 14.03.2013
comment
Я использую синтаксис json (initial_data.json), и он работает нормально... возможно, .yaml не является правильным расширением? Вы пробовали другой формат?   -  person daveoncode    schedule 14.03.2013
comment
@catherine: мне не хватало пакета python-yaml. Я установил его, но все равно python не загружает приборы.   -  person ducin    schedule 14.03.2013
comment
@catherine pyyaml ​​в Debian называется python-yaml. Так что, возможно, так оно и было.   -  person ferrix    schedule 14.03.2013
comment
Попробуйте это для теста: python manage.py loaddata fixtures/initial_data.yaml   -  person catherine    schedule 14.03.2013
comment
python manage.py загружает данные initial_data.yaml   -  person Aldarund    schedule 14.03.2013


Ответы (2)


Судя по всему, Django ищет в приложениях, указанных в INSTALLED_APPS, фикстуры, в которых есть models.py.

Поэтому, если в вашем приложении его нет, создайте пустой models.py, и Django не пропустит поиск фикстур в этом приложении.

person Hamid Nazari    schedule 25.06.2013

initial_data.yaml следует подобрать до тех пор, пока:

  • у вас установлен pyyaml
  • он находится в каталоге fixtures одного из ваших приложений, перечисленных в INSTALLED_APPSsettings.py)

Итак, учитывая, что у вас есть pyaml, это, вероятно, последнее. Пожалуйста, убедитесь, что ваш каталог fixtures находится внутри одного из приложений, перечисленных в INSTALLED_APPS, и вы должны работать.

В случае этой планировки:

/djninja
  /djninja
  /bands
    /fixtures
      - initial_data.yaml
  /fans
  /lyrics

добавление bands к INSTALLED_APPS должно помочь, учитывая, что bands является допустимым пакетом и находится на PYTHONPATH.

Если вы хотите, чтобы Django искал фикстуры в другом каталоге, вы можете следовать советам, данным в "Где Django находит файлы фикстур" в подразделе документации и используйте настройку FIXTURE_DIRS, создавая список дополнительных каталогов для просмотра.

person kgr    schedule 14.03.2013