Как создать Json-объект initial_data для отношения «многие ко многим»? - PullRequest
4 голосов
/ 31 мая 2011

Я создаю файл инициализации для моей базы данных проекта django.Я делаю это, используя файл с именем initial_data.json, который я создал.Например, следующий код (при запуске syncdb) создает в модели Word новую строку, в которой name="apple":

[ { "model": "sites.word", "pk": 1, "fields": { "name": "apple" } } ]

До сих пор мне это удавалосьдля некоторых моделей проблема заключается в моделях, имеющих поле «многие ко многим».Я искал правильный способ сделать это и оказался пустым.

Так, например, если настроение Model имеет много Interests, как бы я записал это настроение в файл Json?Интересы -1 - это интерес-1, интерес-2 и интерес-3.

Как правильно написать в Json отношение моделей ко многим?

РЕДАКТИРОВАТЬ:

@ pastylegs решение было правильным, у меня просто были проблемы, потому что нумерация моих интересов в файле Json была отключена, поэтому он не мог сопоставить их с настроениями.

Ответы [ 2 ]

14 голосов
/ 31 мая 2011

Я почти уверен, что многие поля вашей модели можно записать в виде простого списка:

 [
    { 
        "model": "sites.word", 
        "pk": 1,
        "fields": { 
            "name": "apple",
            "my_m2m_field_name": [1,2,3],
        }
     }
]

где 1, 2, 3 - первичные ключи для отношений

5 голосов
/ 03 июня 2011

Мне нравится использовать команду dumpdata .Я запускаю тестовый сайт, использую форму администратора или само приложение, чтобы добавить только те данные, которые я хочу использовать в своем приборе, затем запускаю

./manage.py dumpdata appname > appname/fixtures/initial_data.json

. Вы можете сбросить все приложения вместе, если выоставьте appname, но мне нравится делать это отдельно для каждой модели.

Если вы используете 1.3 (я еще не), то вы можете использовать --exclude, чтобы не выгружать некоторые детали.Я также видел, что есть опция --indent, чтобы сделать вывод довольно симпатичным (только что обнаружил это сейчас, отвечая на ваш вопрос).

Это одна из тех вещей, которую легко упустить в документации.; -)

...