Это потому, что страницы Wagtail используют Наследование нескольких таблиц , а часть ваших удаленных PageType
страниц все еще существует.
Давайте рассмотрим новую установку Wagtail (т.е. wagtail start mysite
), которая поставляется с моделью home.HomePage
и создает одну HomePage
по умолчанию.Мы можем взглянуть на базу данных и подтвердить, что в базе данных действительно есть запись:
sqlite> SELECT * FROM home_homepage;
page_ptr_id
3
Однако она довольно пуста.Там нет названия, нет пути, ничего, кроме page_ptr_id
.Это потому, что HomePage
наследуется от модели Page
, которая не является абстрактной.Следовательно, для этой модели Page существует таблица базы данных (вот как Многостоловое наследование работает с Django).Давайте посмотрим на соответствующую таблицу (добровольно пропуская некоторые столбцы):
sqlite> SELECT id, path, title, slug, url_path, content_type_id FROM wagtailcore_page;
id|path |title|slug|url_path|content_type_id
1 |0001 |Root |root|/ |1
3 |00010001|Home |home|/home/ |2
Вот она!
Аналогично, в вашем случае есть wagtailcore_page
, myapp_pagetype
и myapp_newpagetype
таблицы.Удалив модель PageType
, django создал миграцию, которая затем удалила myapp_pagetype
, но оставила запись в таблице wagtailcore_page
.Поэтому теперь, когда вы загружаете интерфейс администратора, Wagtail пытается загрузить страницу № 3, но не может это сделать.
По этой причине, перед удалением модели страницы, вам необходимо сначала удалить все страницы.Вы можете добиться этого, добавив к своей миграции шаг RunPython .
Вам все равно придется переименовать вторую модель, хотя это может быть сложно с Django, хотя, если вам повезет,переименование его в файл models.py
и запуск makemigrations
может быть достаточным для Django, чтобы определить, что он должен переименовать модель.Если нет, или если у вас есть отношения, которые нужно переименовать, возможно, будет задействовано больше, см. 1 и 2 .