我正在使用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
列。
答案 0 :(得分:0)
项目表中slug和您的应用程序的非唯一组合可能会导致此错误。我通过手动编辑确保我的所有项目slug都是唯一的来修复它。
您可以添加blank = true foreignkey定义,删除所有迁移并再次运行migraions ...