【问题标题】:How to resolve this, without providing any default value?如何在不提供任何默认值的情况下解决此问题?
【发布时间】:2019-10-29 03:29:17
【问题描述】:

当我尝试运行 python3 manage.py makemigrations 时,它显示: 您正在尝试将不可为空的字段“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)    

我该如何解决这个问题?

【问题讨论】:

  • 您必须提供某种默认值。否则 Django 会在该列中为现有行添加什么?

标签: django


【解决方案1】:

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

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

你有几个选择:

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

2 - 删除您的数据库并重新开始迁移

【讨论】:

    【解决方案2】:

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

    如果您的表没有行,您可以继续并为其赋予任何合法的默认值。默认不会改变你的模型,它只是给Django一个它可以填写的值。由于表中没有数据行,所以除了让Django高兴之外没有任何作用。

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

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      相关资源
      最近更新 更多