3

一步一步,这就是我如何到达现在的位置......

python manage.py migrate在将我的数据库中的表更改Order为包含后,我尝试运行该命令flowertype = IntegerField(),并被告知我无法继续迁移,直到我a)将默认值设置为IntegerField(),或b)让 django 为我设置它。我选择了a并将默认值设置为'something'只是为了消除我的错误。

意识到我不应该将字符串放入 中IntegerField(),我尝试了以下方法来解决此问题。

1)试图重置models.IntegerField()models.IntegerField(default='1')

2) 尝试使用django-reset重置我的 sql 数据库,它给了我很多错误,例如 `ImportError: cannot import name sql_delete

3)注释掉我的Order模型,然后运行makemigrations​​&migrate无济于事。

4

1 回答 1

3

在 python 中迁移失败,因此它从未进入数据库。您应该保留所有内容,然后进入migrations/文件夹并删除添加该flowertype字段的迁移(它将是最新的)。然后python manage.py makemigrations再次运行,但确保您在模型定义中设置了flowertype = IntegerField(default=1)( not )。 default='1'

编辑进一步解释:

当您运行命令makemigrations时,django 会检查您在 python 中的所有模型定义,并将它们与数据库中的内容进行比较。如果两者不匹配,django 将创建一个迁移文件,该文件将更新数据库以反映模型定义,因为它们在 python 代码中定义。这就是migrate命令的作用,它运行所有新的迁移文件。

因此,第一次运行时makemigrations,创建了一个迁移文件,该文件向表中添加了一列Order,并尝试将每一行的值设置为'something'.

这立即失败了,因为它试图将 astr放入和int字段中。

由于它失败了,除非您删除文件,否则每次运行migrate时,django 都会继续尝试运行该脚本。有两个选择 1) 您可以直接进入并手动编辑迁移文件,或者 2) 您可以删除该迁移文件并在修复模型定义后重新创建它。

于 2015-12-06T01:25:18.960 回答