django orm 修改某行数据,如果修改的数据为主键列,会新建数据行而不是修改,为什么?

我有一个表software结构是
name,version,patch,memo四个字段
其中name,version,patch是联合主键
当我用django orm

例如有一行数据是:
|qq|v1.0|0628|xxx|

soft = software.objects.filter(name='xxx').first()
soft.version = 'v3.0'
soft.save()

期望的记过是这行数据的version字段被修改
然而执行的结果是这行数据本身还在,同时新建了一个version字段被修改后的记录

如果我直接使用sql语句执行update操作,可以达到期望的结果

这是为什么?django 的orm不能修改主键列的值嘛?

注:我试了下其他单一主键的表,django orm也是不能修改主键的值,会直接新建一行数据

阅读 4.4k
1 个回答

咦我的妈
不能取出obj然后修改主键值再save()
save的时候因为主键已改变,orm无法找到表中对应行,所以直接就create了
应该直接用.update()

推荐问题
宣传栏