Изменения в миграционном поведении между Django 1.7 и 1.8 - PullRequest
0 голосов
/ 05 июня 2019

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

Кажется, что-то изменилось в Django 1.8, что нарушает некоторые из существующих миграций.Следующее работает в Django 1.7, но выходит за пределы 1.8

def load_pilotranks(apps, schema_editor):
    PilotRank = apps.get_model('warbook', 'PilotRank')
    ranks = [
      { 'rank' : 'Champion', 'min_piloting' : 0, 'min_gunnery' : 0, 'skills_limit' : 0 }
    , { 'rank' : 'Star', 'promotion': 'Champion', 'min_piloting' : 0, 'min_gunnery' : 0, 'skills_limit' : 0 }
    , { 'rank' : 'Contender', 'min_gunnery' : 3, 'min_piloting': 4, 'skills_limit': 2, 'auto_train_cp': 1, 'promotion': 'Star' }
    , { 'rank' : 'Rookie', 'min_gunnery' : 4, 'min_piloting': 5, 'skills_limit': 1, 'auto_train_cp': 2, 'promotion': 'Contender' }
    ]

    for rank in ranks:
        if 'promotion' in rank:
            rank['promotion'] = PilotRank.objects.get(rank=rank['promotion'])
        PilotRank.objects.create(**rank)

Теперь это приводит к ошибке: ValueError: Невозможно назначить "": "PilotRank.promotion" должен быть экземпляром "PilotRank".

(Хотя этот пример, вероятно, можно исправить, заменив нарушающий код на JSON, существуют более сложные примеры, к которым будет сложнее обратиться).

Общим знаменателем является то, что объект Model возвращаетсяapps.get_model не всегда работает (если я использую model.object.get (), он вернет объект, который можно использовать для обновления этой записи, но нельзя использовать для установки ссылки на этот объект)

Что изменилось, что сломало это?

...