当我尝试运行python3 manage.py makemigrations时,它显示:您正试图在没有默认值的情况下向journey_template添加一个不可为空的字段'topic_id‘;我们不能这样做(数据库需要一些东西来填充现有行)。请选择修复方法: 1)立即提供一次性默认值(将在此列的所有现有行上设置为空值) 2)退出,然后让我在models.py中添加默认值选择一个选项:
enter code here
from django.db import models
class Topic_Table(models.Model):
topic_id=models.IntegerField(primary_key=True)
topic_name = models.CharField(max_length=100, blank=True)
weightage = models.CharField(max_length=15, blank=True)
grade = models.IntegerField( null=True)
subject = models.CharField(max_length=100, blank=True)
sequence = models.IntegerField(null=True)
month = models.CharField(max_length=15, blank=True)
class Journey_template(models.Model):
student_id = models.IntegerField(default=1)
topic_id = models.ForeignKey('Topic_Table',on_delete=models.CASCADE)
subtopic_id = models.IntegerField()
journey_template_key = models.IntegerField(primary_key=True) 我该怎么解决这个问题?
发布于 2019-06-14 21:30:50
您正在Journey_template模型上添加topic_id字段。
此模型在您的数据库中已有数据。
您有几个选项:
1-提供默认值(如输入数字1)
2-删除数据库并开始全新迁移
发布于 2019-06-14 21:32:46
如果您的表已经有数据,则添加一个不带任何默认值的不可为空的列将违反非空约束。Django迁移不会检查表中的数据,因此它假定有一些数据。
如果您的表没有行,您可以继续并为其提供任何合法的默认值。默认设置不会改变你的模型,它只是给Django一个可以填充的值。因为表中没有数据行,所以除了让Django高兴之外,它不会有任何效果。
如果您的表有行,那么如果您能想出一个合理的值来填充现有的行,那么就使用它。您的另一个选择是通过将null=True添加到字段来更改模型,Django将在该字段中为现有行添加空值。(稍后,您可以使用Django或其他方法在这些字段中输入自己的值,如果愿意,可以将该字段改回null=False。当您迁移时,您将得到相同的问题,但如果字段不为空,则答案将不起作用。null=False是模型中任何字段的默认值。
https://stackoverflow.com/questions/56599088
复制相似问题