首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不提供任何默认值的情况下解决此问题?

如何在不提供任何默认值的情况下解决此问题?
EN

Stack Overflow用户
提问于 2019-06-14 21:20:46
回答 2查看 918关注 0票数 0

当我尝试运行python3 manage.py makemigrations时,它显示:您正试图在没有默认值的情况下向journey_template添加一个不可为空的字段'topic_id‘;我们不能这样做(数据库需要一些东西来填充现有行)。请选择修复方法: 1)立即提供一次性默认值(将在此列的所有现有行上设置为空值) 2)退出,然后让我在models.py中添加默认值选择一个选项:

enter code here

代码语言:javascript
复制
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)    

我该怎么解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-14 21:30:50

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

此模型在您的数据库中已有数据。

您有几个选项:

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

2-删除数据库并开始全新迁移

票数 1
EN

Stack Overflow用户

发布于 2019-06-14 21:32:46

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

如果您的表没有行,您可以继续并为其提供任何合法的默认值。默认设置不会改变你的模型,它只是给Django一个可以填充的值。因为表中没有数据行,所以除了让Django高兴之外,它不会有任何效果。

如果您的表有行,那么如果您能想出一个合理的值来填充现有的行,那么就使用它。您的另一个选择是通过将null=True添加到字段来更改模型,Django将在该字段中为现有行添加空值。(稍后,您可以使用Django或其他方法在这些字段中输入自己的值,如果愿意,可以将该字段改回null=False。当您迁移时,您将得到相同的问题,但如果字段不为空,则答案将不起作用。null=False是模型中任何字段的默认值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56599088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档