1

大家好,我正在做一个 django 教程,我错过了讲师在 models.py 中所做的更改,所以我修复了它,但是当尝试迁移到数据库时,它给了我一个我不理解或我不理解的代码不知道该怎么做,下面是它所说的:

(tonyto) PS E:\web-dev\Python\Django1\myappito> python manage.py makemigrations

Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py

他们是这样的 name: models.CharField(max_length=100) details: models.CharField(max_length=500)

这就是我更新它 的方式name: models.CharField(max_length=100) details: models.CharField(max_length=500) 提前谢谢你。

4

2 回答 2

1

第一种方法

  • 这是因为您在创建的每个字段上运行迁移,因此先前创建的填充不接受空值,因此您希望在您的情况下提供默认值,它是字符串值
  • 您可以选择第一个选项,但答案是“默认”并带有引号以将其理解为字符串

第二种解决方案

删除迁移文件夹中创建的最新文件并将您的模型修改为

'''
name = models.CharField(max_length=100,null=True) 
details = models.CharField(max_length=500, null=True) 
'''

然后再次运行迁移

python manage.py makemigration python manage.py migrate 然后再次返回模型并从每个字段中删除 null 并运行 python manage.py makemigration python manage.py migrate

于 2021-11-08T17:50:29.437 回答
1

这是因为您试图迁移一个不能为空的模型字段,但由于它不能为空,它需要一个默认值,以便 django 可以用该字段的空值替换所有现有行。

你有两个选择:

  1. 手动提供默认值,django 它将用这个替换该字段的所有空值

  2. 在模型中设置一个默认值,例如:

number = models.IntegerField(default=1)

string = models.CharField(default='')

于 2021-11-08T18:15:18.187 回答