如何解决此问题而不提供任何默认值?

时间:2019-06-14 13:20:45

标签: django

当我尝试运行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)    

我该如何解决?

2 个答案:

答案 0 :(得分:0)

您正在topic_id模型上添加Journey_template字段。

此模型已经在您的数据库中包含数据。

您有几种选择:

1-提供默认值(例如输入数字1)

2-删除数据库,然后重新进行迁移

答案 1 :(得分:0)

如果表中已经有数据,则添加没有任何默认值的非空列将违反非空约束。 Django迁移不会检查表中的数据,因此假设其中有一些。

如果表没有行,则可以继续给它提供任何合法的默认值。默认值不会更改您的模型,它只是为Django提供一个可以填充的值。由于表中没有数据行,因此除了使Django满意之外,它没有任何作用。

如果表中有行,则可以想到一个明智的值来填充现有行,然后使用它。您的另一个选择是通过在字段中添加null = True来更改模型,而Django只会在该字段中为现有行添加null。 (稍后,您可以使用Django或其他方法将自己的值放入这些字段,然后根据需要将字段更改为null = False。迁移时会遇到相同的问题,但是如果这些字段的答案无效不为空)。 null = False是模型中任何字段的默认值。