尝试迁移时,完整性错误未为空约束失败

时间:2019-07-11 12:15:45

标签: django model

尝试迁移时收到此错误:

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

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

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

2)我最初运行时没有默认值= none,空白= true,null = true。现在,我再次运行了makemigrations,但是当我进行迁移时,仍然出现错误,我认为它是在尝试首先运行旧的迁移。我该如何解决?

MODELS.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

1 个答案:

答案 0 :(得分:0)

Django迁移的工作原理是这样的。

首先,您运行makemigrations,该文件将根据从运行makemigrations生成的最后一个文件所做的更改创建一个文件。

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

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

假设迁移文件名为“ 0002_auto_20190212_1_1240.py”,然后在“ django_migrations”表中插入一行,其中app = [app_name],名称= 0002_auto_20190212_1240,apply = [最后一个实例后+1秒]。 / p>