Объединение двух типов страниц о трясогузках в одну
Допустим, у нас есть два типа страниц ContentPage и Folder, которые выполняют одну и ту же работу, и мы хотим объединить их в один.
В основном мы хотим объединить Folder в ContentPage.
Я пришел к следующему решению, но хочу быть уверенным, что ничего не упустил.
- миграция:
class Migration(migrations.Migration):
dependencies = [
...
]
operations = [
# copy all `folder` specific fields into `contentpage` table
migrations.RunSQL(
"""
INSERT INTO app_contentpage (
page_ptr_id,
...,
body,
...
) SELECT
...,
body,
...
FROM app_folderpage;
"""
),
# update all tables that have references to `django_content_type` table
# folder.content_type_id = 12
# contentpage.content_type_id = 11
migrations.RunSQL(
"""UPDATE wagtailcore_page SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL(
"""UPDATE wagtailcore_modellogentry SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL(
"""UPDATE wagtailcore_pagelogentry SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL(
"""UPDATE wagtailcore_revision SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL(
"""UPDATE wagtailcore_taskstate SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL(
"""UPDATE wagtailcore_workflowstate SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL(
"""UPDATE wagtailsearch_indexentry SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL(
"""UPDATE wagtailcore_workflowcontenttype SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL(
"""UPDATE wagtailcore_task SET content_type_id = 11 WHERE content_type_id = 12;"""
),
migrations.RunSQL("""DELETE FROM app_folderpage;"""),
]
запустить
.python manage.py rebuild_references_index. Также можно было бы обновитьwagtailcore_referenceindexс помощью SQL, но мне кажется, что запускrebuild_references_indexболее надеженудалите
Folderмодель из кода и запуститеpython manage.py makemigrationsвручную очистите (или создайте миграцию) 'auth_permission' и
django_admin_logwhere content_type_id is equalfolder.content_type_idудалите
app_folder*записи изdjango_content_type
Буду признателен за любые мысли и комментарии.