Нулевое значение установлено в True, но все равно нарушает ограничение not-null
Я пытаюсь установить нулевую боковую панель из интерфейса администратора Django, как показано ниже:
Однако, когда я нажимаю "Сохранить", я получаю ошибку IntegrityError:
IntegrityError at /admin/qa/howquestion/112/change/
null value in column "sidebar_id" violates not-null constraint
DETAIL: Failing row contains (112, <p>prettyprint a JSON file<br></p>, To pretty print a JSON file in Python, you can use the json m...).
Это странно, потому что null уже установлен в True:
sidebar = models.ForeignKey(Sidebar, on_delete=models.SET_NULL, related_name='qa_sidebars',null=True, blank=True)
И я тоже применял миграции.
Обратите внимание, что ошибка не возникает при разработке, когда подключена база данных SQLite3. Это происходит только при развертывании, в котором используется PostGreSQL.
У меня закончились варианты. Я обыскал все, но так и не понял этого. Кто-нибудь может помочь?
Редактирование: Я только что проверил файлы миграции, чтобы убедиться, что миграция была применена. Этот файл указывает на то, что миграция была применена, я думаю:
# Generated by Django 3.2 on 2024-03-14 16:48
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('marketing', '0001_initial'),
('qa', '0022_howquestion_no_code'),
]
operations = [
migrations.AlterField(
model_name='howquestion',
name='sidebar',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='qa_sidebars', to='marketing.sidebar'),
),
]
~
Это было проблемой при переносе некоторых скриптов python на Linux. Они использовали winapi для значений NULL. В windows вы можете использовать NULL, если импортируете winapi, но обычно гораздо меньше проблем с тем, чтобы просто использовать 0 для NULL. Если поле id является автоинкрементным, вы должны использовать 0.