Почему apps.get_model в миграции данных
Вопрос
Почему в функции RunPython модель берут через apps.get_model("blog", "Article"), а не импортом from blog.models import Article?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Импорт моделей в миграциях синтаксически запрещён, и
migrateупадёт с ошибкой get_modelработает быстрее, потому что не импортирует модуль моделей целиком- Импорт модели создаёт новую таблицу, если её ещё нет в базе на этом шаге
- Историческая модель совпадает со схемой на этом шаге, а импортированная нетправильный ответ
Разбор
Миграции применяются и через полгода на новой базе, когда модель в коде уже другая: появились поля, которых в базе на этом шаге ещё нет. Импортированная модель попробует их читать и упадёт. apps.get_model отдаёт модель, восстановленную из истории миграций. Правда, у неё нет ваших методов и менеджеров, только поля. Синтаксического запрета нет, и на скорость это не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
RunPython в миграциях Django
Следующий вопрос
Миграция встала в очередь за долгой транзакцией