Django:迁移到NullBooleanField失败,IntegrityError“包含空值”

时间:2015-04-01 13:52:42

标签: 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,
        ),
    ]

运行manage.py migrate失败并显示以下错误:

django.db.utils.IntegrityError: column "is_dispensing" contains null values

我的模型文件中的字段:

is_dispensing = models.NullBooleanField(blank=True)

以前是:

is_dispensing = models.BooleanField(null=True, blank=True) 

当我添加它时,我被要求提供一个默认值,我将其设置为无。

我发现此消息令人困惑 - 我正在尝试将列类型迁移到NullBooleanField,那么为什么它不能包含空值?这就是这个列类型的重点,不是吗? :)

更新:另一件令人困惑的事情是:如果我进入Postgres并查看应该包含该列的表,它实际上根本没有is_dispensing列。

1 个答案:

答案 0 :(得分:0)

项目表中slug和您的应用程序的非唯一组合可能会导致此错误。我通过手动编辑确保我的所有项目slug都是唯一的来修复它。

您可以添加blank = true foreignkey定义,删除所有迁移并再次运行migraions ...