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

问题描述 投票:5回答:1

我正在使用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) 

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

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

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

python django django-orm django-migrations
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.