Объединение двух типов страниц о трясогузках в одну

Допустим, у нас есть два типа страниц ContentPage и Folder, которые выполняют одну и ту же работу, и мы хотим объединить их в один. В основном мы хотим объединить Folder в ContentPage.

Я пришел к следующему решению, но хочу быть уверенным, что ничего не упустил.

  1. миграция:
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;"""),
    ]
  1. запустить python manage.py rebuild_references_index. Также можно было бы обновить wagtailcore_referenceindex с помощью SQL, но мне кажется, что запуск rebuild_references_index более надежен

    .
  2. удалите Folder модель из кода и запустите python manage.py makemigrations

  3. вручную очистите (или создайте миграцию) 'auth_permission' и django_admin_log where content_type_id is equal folder.content_type_id

  4. удалите app_folder* записи из django_content_type

Буду признателен за любые мысли и комментарии.

Вернуться на верх