Ric*_*ard 5 python django django-orm django-migrations
我正在Django 1.7中进行操作,并尝试将一个数据库字段is_dispensing从现有字段迁移BooleanField到NullBooleanField。
我的迁移文件:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('frontend', '0007_practice_is_dispensing'),
]
operations = [
migrations.AlterField(
model_name='practice',
name='is_dispensing',
field=models.NullBooleanField(),
preserve_default=True,
),
]
Run Code Online (Sandbox Code Playgroud)
运行manage.py migrate失败,并显示以下错误:
django.db.utils.IntegrityError: column "is_dispensing" contains null values
Run Code Online (Sandbox Code Playgroud)
我的模型文件中的字段:
is_dispensing = models.NullBooleanField(blank=True)
Run Code Online (Sandbox Code Playgroud)
以前是:
is_dispensing = models.BooleanField(null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
当我添加它时,要求我提供一个默认值,我将其设置为“无”。
我发现此消息令人困惑-我正在尝试将列类型迁移到NullBooleanField,为什么它不能包含空值?这就是该列类型的重点,不是吗?:)
更新:另一个令人困惑的事情是:如果我进入Postgres并查看应该具有该列的表,那么实际上它根本没有任何is_dispensing列。
小智 0
项目表中的 slugs 和应用程序的非唯一组合可能会导致此错误。我通过手动编辑确保所有项目 slugs 都是唯一的来修复此问题。
您可以添加空白= true外键定义,删除所有迁移并再次运行迁移...