Ошибка при работе с двумя базами данных в Django: sqlite3.IntegrityError: NOT NULL constraint failed: wagtailcore_page.draft_title

Я работаю над проектом Django с Wagtail, который использует две базы данных. Первая - стандартная база данных sql lite для всех моделей django (называется db_tool.sqlite3), вторая - тоже sql lite, но для интеграции с Wagtail (называется db.sqlite3).

Я хотел перейти на db_tool.sqlite3 с помощью следующей команды

python manage.py make migrations
python manage.py migrate --database db_tool

но теперь я получаю следующее сообщение об ошибке относительно трясогузки, которое я никогда не получал раньше.

django.db.utils.IntegrityError: NOT NULL constraint failed: wagtailcore_page.draft_title

Прежде всего: я не понимаю этого, потому что я назвал db_tool в частности, и мне интересно, почему интеграция wagtail вызывает ошибку, когда я пытаюсь мигрировать на db_tool.

Второе: я не вижу никакого конкретного поля на моих wagtail-страницах под названием draft_title и у меня нет никакой черновой страницы на данный момент.

Третье: сообщение об ошибке также относится к файлу миграции wagtail, который можно найти в побочных пакетах (см. ниже). Так что, возможно, это корень ошибки, но я не понимаю, как это связано с другим сообщением об ошибке, потому что с тех пор все работало нормально, и я ничего не менял, кроме некоторого содержимого моих страниц трясогузки.

File "C:\Users\pubr\.conda\envs\iqps_web\lib\site-packages\wagtail\core\migrations\0001_squashed_0016_change_page_url_path_to_text_field.py", line 23, in initial_data 
root = Page.objects.create(

Версия трясогузки, которую я использую здесь - wagtail 2.15.2, и я не обновлял ее с тех пор, как начал проект...

В связи с тем, что моя база данных wagtail имеет имя базы данных по умолчанию django-database, возможно ли, что я случайно попробовал миграцию, которая была предназначена для tool_db.sqlite3, не назвав ее в migrate-команде и вызвал этим ошибку?

Поэтому я буду очень благодарен, если кто-нибудь знает, откуда берется эта ошибка, или хотя бы, что я могу попробовать, чтобы исправить ее...

Добрые пожелания и благодарность!

если при работе с двумя базами данных в Django вы получаете ошибку sqlite3.IntegrityError: NOT NULL constraint failed: wagtailcore_page.draft_title, это означает, что в колонку NULL таблицы wagtailcore_page было вставлено значение draft_title, но эта колонка не допускает значений NULL.

Чтобы исправить эту ошибку, необходимо убедиться, что в столбец NULL для всех строк таблицы draft_title вставлено неwagtailcore_page значение. Это можно сделать, задав значение по умолчанию для столбца в определении модели или вручную обновив существующие строки в таблице.

from django.db import models

class Page(models.Model):
    # Other fields...

    draft_title = models.CharField(max_length=255, default='Untitled')

вы можете обновить существующие строки в таблице wagtailcore_page, чтобы установить неNULL значение для столбца draft_title.

Мне неясно, нарушена ли ваша база данных в настоящее время или нет. Надеюсь, что нет, но если это так, пожалуйста, сделайте резервную копию каждой из них, прежде чем делать что-либо еще.

Похоже, что вы пытаетесь работать не с той базой данных. Настроены ли у вас DATABASE_ROUTERS? Я думаю, это может помочь вам предотвратить внедрение кода из одного приложения в неправильную базу данных. Пример в документации Django в основном ориентирован на чтение реплик, но должен быть адаптирован к вашей ситуации: https://docs.djangoproject.com/en/4.1/topics/db/multi-db/#an-example

Если ваши базы данных находятся в неправильном состоянии, начните с просмотра файла django_migrations в каждой из них, а затем тщательно обрезайте испорченную, пока не вернетесь к разделению, которое вы обеспечивали.

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