Укажите зависимость приложения в миграции

Я пытаюсь добавить исходные данные в Django 1.7 и читал, что рекомендуется использовать миграцию данных.

Я правильно создал свой файл миграции под названием «0001_groups», в котором я создаю несколько групп и разрешений contrib.auth.

Проблема в том, что он запускается до запуска auth миграции.

Я отправился узнать, как называется последняя миграция приложение auth, и оно называется 0005_alter_user_last_login_null.py. Итак, я попытался с:

dependencies = [
    ('auth', '0005_alter_user_last_login_null'),
]

но я получаю:

KeyError: u «Зависимости appname.0001_groups миграции ссылаются на несуществующий родительский узел («auth», «0005_alter_user_last_login_null»)»

Я гуглил эту ошибку, и она всегда ссылалась на исправленные ошибки Django 11-месячной давности.

Как я могу правильно указать зависимость приложения auth?


person Shoe    schedule 06.09.2014    source источник
comment
Вы пробовали django.contrib.auth вместо auth при указании зависимостей?   -  person ChillarAnand    schedule 06.09.2014


Ответы (2)


Вы используете 1.7, но смотрите на исходное дерево master. См. это и попробуйте 0001_initial.

person Kevin Christopher Henry    schedule 06.09.2014
comment
Да, я заметил. В итоге я использовал __latest__. Спасибо. - person Shoe; 07.09.2014
comment
Вы можете использовать __first__, если 0001_initial действительно то, что вам нужно. - person Rockallite; 26.08.2015

Я узнал, что вы можете ссылаться на последнюю миграцию с помощью __latest__:

dependencies = [
    ('auth', '__latest__'),
]
person Shoe    schedule 07.09.2014
comment
Однако в целом вам не следует захотеть ссылаться на последнюю миграцию. Что делать, если у вас есть ForeignKey для модели, которая позже будет удалена? Ваша миграция сломается. Маловероятно, что это имеет значение для стабильного пакета, такого как django.contrib.auth, но это все еще плохая практика и ничего вам не даст. - person Kevin Christopher Henry; 07.09.2014
comment
Вовсе нет, миграция работает не так. Обратите внимание, что makemigrations создает зависимости от конкретных миграций, а не __latest__, и что сам исходный код Django ссылается на определенные миграции в своих зависимостях (например, здесь). Подробнее о проблемах с использованием __latest__ см. здесь. - person Kevin Christopher Henry; 07.09.2014
comment
Я предлагаю вам опубликовать новый вопрос вместе с вашим кодом, объясняющим проблему, с которой вы столкнулись. Здесь недостаточно продолжения. Пункт о пользовательском Managers объясняется в документации. Чтобы миграция работала, Django должен иметь версионное текстовое представление ваших моделей, а поскольку невозможно сериализовать произвольный код Python, это представление не может включать пользовательские методы или Managers. - person Kevin Christopher Henry; 07.09.2014