Django ORM迁移在IntegerField上给出“ValueError:invalid literal for int()”

2024-10-02 02:32:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

2)试图使用django-reset重置我的sql数据库,但它给了我大量错误,如“ImportError:cannotimport name sql_delete”

3)注释掉我的Order模型,然后运行makemigrations&;migrate但没有用。在


Tags: djangopy命令数据库sqlmanagemodels错误
1条回答
网友
1楼 · 发布于 2024-10-02 02:32:17

迁移在python中失败,因此它从未到达数据库。您应该保持原样,然后进入^{cd1>}文件夹,删除添加^{{cd2>}字段的迁移(这将是最近的一个)。然后再次运行^{cd3>},但请确保在模型定义中设置了^{cd4>}(notdefault='1')。

编辑以获得进一步解释:

运行命令^{cd6>}时,django将检查python中的所有模型定义,并将它们与数据库中的定义进行比较。如果两者不匹配,django将创建一个迁移文件,该文件将更新数据库,以反映python代码中定义的模型定义。这就是^{{cd7>}命令所做的,它运行所有新的迁移文件。

因此,第一次运行^{cd6>}时,创建了一个迁移文件,将列添加到^{{cd9>}表中,并尝试将每行的值设置为^{{cd10>}。

这立即失败,因为它试图将^{cd11>}放入和^{cd12>}字段。

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

相关问题 更多 >

    热门问题