【踩坑】Django中一个危险而隐蔽的坑

触发条件

1.使用inspectdb生产model文件
2.使用自己做的主键(如xxx_id)而非django自动生成主键
3.假设有model A 主键为自定义的a_id:

1
2
3
4
>>> a1 = A(a_id=1, name="杨子荣")
>>> a1.save()
>>> a2 = A(a_id=1, name="座山雕")
>>> a2.save()

以上操作并没有报错,然而当打开数据库时,会发现数据被替换了。

解决方案

用 obj.save(force_insert=True) 来代替save()