尝试迁移时收到此错误:
"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
答案 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>