首页 > 解决方案 > 尝试迁移时完整性错误不是空约束失败

问题描述

我在尝试迁移时收到此错误:

"return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: unit_manifests.product_name_id"

这是参考下面模型中的 product_name 字段。

1) 为什么我需要为外键字段设置默认值?

2)我最初运行时没有默认=无,空白=真,空=真。我现在再次运行 makemigrations 但是当我迁移时我仍然收到错误,我相信它正在尝试首先运行旧迁移。我怎样才能解决这个问题?

模型.PY

class Manifests(models.Model):

    reference = models.ForeignKey(Orders)
    cases = models.IntegerField()
    product_name = models.ForeignKey(Products, default=None, blank=True, null=True)
    count = models.IntegerField()
    CNF = models.DecimalField(max_digits=11, decimal_places=2, default=None, blank=True, null=True)
    FOB = models.DecimalField(max_digits=11, decimal_places=2, default=None, blank=True, null=True)

    def __str__(self):
        return self.description

标签: djangomodel

解决方案


Django 迁移是这样工作的。

首先运行 makemigrations,它将根据运行 makemigrations 生成的最后一个文件的更改创建一个文件。

然后运行 ​​migrate ,它将推送尚未在表 'django_migrations' 中的数据库中注册的迁移文件夹中的更改。迁移文件名很重要,因为 django 使用它来标识迁移。

如果要伪造迁移,可以使用要伪造的迁移文件在迁移表中手动创建数据库实例。

假设迁移文件名为“0002_auto_20190212_1240.py”,然后在“django_migrations”表中插入一行,app=[app_name],name=0002_auto_20190212_1240,apply=[+1 seconds after last instance]。


推荐阅读