首页 > 解决方案 > Django 在迁移期间要求默认值

问题描述

我有以下型号:

    title = models.CharField(max_length=100)
    description = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})


class Ingredient(models.Model):
    ingredients_recipe = models.ForeignKey(Post, on_delete=models.CASCADE)
    type = models.CharField(max_length=50)
    quantity = models.IntegerField()
    measurement = models.CharField(max_length=50)


class MethodStep(models.Model):
    methods_recipe = models.ForeignKey(Post, on_delete=models.CASCADE, null=True)
    step = models.TextField()

当我尝试运行时makemigrations,我没有得到类的错误Ingredient,但是在MethodStep类上我得到一个错误说:

您正在尝试将不可为空的字段“methods_recipe”添加到没有默认值的方法步骤;我们不能这样做(数据库需要一些东西来填充现有的行)。

有人能帮我吗?我不确定这些类中的每一个有什么不同,这意味着它们MethodStep有错误但Ingredient没有。

编辑:我也尝试过删除/清除/删除数据库,但每次makemigrations运行时错误仍然存​​在。

标签: pythondjangodjango-models

解决方案


有时除了重置数据库之外,您还必须从项目中删除所有现有的迁移(或者至少是这些模型所属的包的迁移)。

删除迁移文件夹中的所有文件,除了 _init__.py 文件。

当简单地转储您的数据库并重新启动 django 时,启动将按照它们创建的顺序应用迁移历史记录。

这意味着如果您在将更改迁移到数据库之后添加了此 ForeignKey 字段,除非您删除迁移历史记录,否则 django 不会让您在没有默认值的情况下进行迁移。


推荐阅读