当我尝试运行python3 manage.py makemigrations时,它显示: 您正在尝试将非空字段'topic_id'添加到trip_template中,而没有默认值;我们无法做到这一点(数据库需要一些东西来填充现有行)。 请选择一个修复程序: 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)
我该如何解决?
答案 0 :(得分:0)
您正在topic_id
模型上添加Journey_template
字段。
此模型已经在您的数据库中包含数据。
您有几种选择:
1-提供默认值(例如输入数字1)
2-删除数据库,然后重新进行迁移
答案 1 :(得分:0)
如果表中已经有数据,则添加没有任何默认值的非空列将违反非空约束。 Django迁移不会检查表中的数据,因此假设其中有一些。
如果表没有行,则可以继续给它提供任何合法的默认值。默认值不会更改您的模型,它只是为Django提供一个可以填充的值。由于表中没有数据行,因此除了使Django满意之外,它没有任何作用。
如果表中有行,则可以想到一个明智的值来填充现有行,然后使用它。您的另一个选择是通过在字段中添加null = True来更改模型,而Django只会在该字段中为现有行添加null。 (稍后,您可以使用Django或其他方法将自己的值放入这些字段,然后根据需要将字段更改为null = False。迁移时会遇到相同的问题,但是如果这些字段的答案无效不为空)。 null = False是模型中任何字段的默认值。