更新对象时发生Django IntegrityError

时间:2018-07-09 14:26:44

标签: python django python-3.x django-orm

我正在将我们的项目从python 2升级到3,并观察到有关使用空值创建/保存对象的不一致行为。

考虑使用CharField(并且 default='')定义的null=True

在python 2分支上,创建该字段设置为None的对象会导致异常,但是一旦创建,将该字段设置为None,然后保存就可以正常工作(尽管None会转换为'' ,可能是Django)

在python 3分支上,为同一模型使用field=None创建更新会导致异常(IntegrityError)。

我不确定预期的行为是什么,如果某个字段未定义null=True,则在用None更新该字段时会出错。但是,使用None进行保存显然已经在python 2分支上工作了一段时间(几年了)..除非那是一个bug而不是一个功能?

有人遇到过同样的问题吗?

note :两个分支都具有相同的Django(目前为1.9,在python 3转换后更新为2),相同版本的MySQL(5.7.22),python 2分支在Ubuntu 14.04上运行,和python 3 on 16.04。

更新

我已决定清理将没有将null=True设置为None的任何字段的代码。

我的意思是,定义一个不可为空的字段,然后将其设置为null,谁来做呢? :D

更严重的是,有人可以确认Django ORM在任何时候是否都很聪明,并将None值转换为空字符串吗?我正在处理的某些代码已经很老了,也许它符合编写本文时的预期。仍然无法确定..但正如我的案例所示,这种行为可能并不可靠,所以我正在做更明智的事情。

0 个答案:

没有答案