首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迁移时出错: django.db.utils.IntegrityError:列"primary_language_id“包含空值

迁移时出错: django.db.utils.IntegrityError:列"primary_language_id“包含空值
EN

Stack Overflow用户
提问于 2015-10-23 18:02:47
回答 2查看 13.7K关注 0票数 4

我正在做一个Django项目,用相同模型的models.ForeignKey的几个实例做了一个模型。

代码语言:javascript
运行
复制
class Country(models.Model):
    name = models.CharField(max_length=100)
    primary_language = models.ForeignKey('Language', related_name='primary_language', default="")
    secondary_language = models.ForeignKey('Language', related_name='secondary_language', default="")
    tertiary_language = models.ForeignKey('Language', related_name='tertiary_language', default="")

    def __str__(self):
        return self.name

这是语言模型:

代码语言:javascript
运行
复制
class Language(models.Model):
    name = models.CharField(max_length=50)
    abbreviation = models.CharField(max_length=2)

    def __str__(self):
        return self.name

在执行$python3 manage.py makemigration base时,它工作得很好,没有错误。我把我认为最重要的两个迁移文件放了进去。

代码语言:javascript
运行
复制
class Migration(migrations.Migration):

    dependencies = [
        ('base', '0002_country_country_code'),
    ]

    operations = [
        migrations.CreateModel(
            name='Currency',
            fields=[
                ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)),
                ('name', models.CharField(max_length=50)),
                ('abbreviation', models.CharField(max_length=3)),
            ],
        ),
        migrations.CreateModel(
            name='Language',
            fields=[
                ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)),
                ('name', models.CharField(max_length=50)),
                ('abbreviation', models.CharField(max_length=2)),
            ],
        ),
        migrations.AddField(
            model_name='country',
            name='phone_country_code',
            field=models.CharField(default='', max_length=7),
        ),
        migrations.AlterField(
            model_name='country',
            name='country_code',
            field=models.CharField(default='', max_length=2),
        ),
        migrations.AddField(
            model_name='country',
            name='primary_language',
            field=models.ForeignKey(to='base.Language', default=''),
        ),
        migrations.AddField(
            model_name='country',
            name='secondary_language',
            field=models.ForeignKey(related_name='secondary_language', to='base.Language', default=''),
        ),
        migrations.AddField(
            model_name='country',
            name='tertiary_language',
            field=models.ForeignKey(related_name='tertiary_language', to='base.Language', default=''),
        ),
    ]

class Migration(migrations.Migration):

    dependencies = [
        ('base', '0006_auto_20151023_0918'),
    ]

    operations = [
        migrations.AddField(
            model_name='country',
            name='primary_language',
            field=models.ForeignKey(default='', related_name='primary_language', to='base.Language'),
        ),
        migrations.AddField(
            model_name='country',
            name='secondary_language',
            field=models.ForeignKey(default='', related_name='secondary_language', to='base.Language'),
        ),
        migrations.AddField(
            model_name='country',
            name='tertiary_language',
            field=models.ForeignKey(default='', related_name='tertiary_language', to='base.Language'),
        ),
        migrations.AlterField(
            model_name='language',
            name='abbreviation',
            field=models.CharField(max_length=2),
        ),
        migrations.AlterField(
            model_name='language',
            name='name',
            field=models.CharField(max_length=50),
        ),
    ]

现在,当运行迁移时,我收到一条错误消息,我无法确定。我认为这些行在堆栈跟踪中很重要:

代码语言:javascript
运行
复制
johan@johan-pc:~/sdp/gezelligehotelletjes_com$ python3 manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: auth, base, sessions, admin, contenttypes, hotel
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying base.0003_auto_20151023_0912...Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
psycopg2.IntegrityError: column "primary_language_id" contains null values


The above exception was the direct cause of the following exception:

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

首先,我没有专栏"primary_language_id“,但我猜这是由Django创建的。即使在删除整个语言模型和国家/地区模型中的语言行时,我仍然收到此错误。

有人能帮我弄清楚这件事吗?

EN

Stack Overflow用户

发布于 2020-12-26 07:46:39

如果你创建了一个表,并填充了它,当你尝试添加另一列时,Django就像这些已经在表中的数据没有这个人试图添加的新字段,结果就搞砸了。我所做的是转到我的表并删除所有数据。一旦我这样做了,我就可以迁移了。如果你有一个很小的表,这可能会起作用,不需要接触迁移。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33299710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档