python - 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
运行时错误仍然存在。
解决方案
有时除了重置数据库之外,您还必须从项目中删除所有现有的迁移(或者至少是这些模型所属的包的迁移)。
删除迁移文件夹中的所有文件,除了 _init__.py 文件。
当简单地转储您的数据库并重新启动 django 时,启动将按照它们创建的顺序应用迁移历史记录。
这意味着如果您在将更改迁移到数据库之后添加了此 ForeignKey 字段,除非您删除迁移历史记录,否则 django 不会让您在没有默认值的情况下进行迁移。
推荐阅读
- reactjs - 使用getInitialProps时如何处理nextjs中加载缓慢的页面?
- swift - 无法从 Firestore 数据库加载分段控制表视图中的数据
- c# - 如何在 Xamarin 上的 Get API 中将此 JSON 对象映射到 C# 对象
- angular - Angular 7 - 如何使用模板驱动从对象读取服务端验证?
- python - Python:无法从 tar 中仅提取特定文件夹
- apache-flink - 提交大量作业到 flink 后系统变慢
- jquery - 什么是 Google AdSense 产品名称?
- spring-cloud - 自定义 Eureka Server 仪表板
- angular - 从 Angular 中的 Parent 订阅子模型更改
- ruby-on-rails - 删除并创建新的作者记录后,Rails 更新 book 表中的 author_id