对不起,我英语不好,我的问题是:
我试图用.save()方法更新Django中的PK,但是当我保存对象Django时,会用相同的数据复制该对象,但PK不同,例如:
from gestion_empleados.Models import Empleados
>>> e = Empleados.objects.get(pk="56789034U")
>>> e.pk
u'56789034U'
>>> e.pk = "11111111L"
>>> e.save()
>>> e.pk
'11111111L'
>>> e2 = Empleados.objects.get(pk="56789034U")
>>> e2
<Empleados: Juan 56789034U>
>>> e
<Empleados: Juan 11111111L>
不同的主键对象是相同的,我想改变主键而不复制对象。
有什么解决办法吗?谢谢!
Django的
Model.save()
方法依赖于数据库中是否已经存在具有相同PK的行来决定它是否应该发出INSERT
或UPDATE
查询。作为一个更一般的规则:虽然在技术上可以在SQL级别修改PK,但这并不一定是一个好主意,因为这意味着您必须更新所有相关表中的所有相关行(好的,在技术上仍然是可能的,但在我看来确实不是一个明智的主意),并警告所有依赖于这个PK的应用程序的变化-然后祝你好运。长话短说:把PKs看作是不可变的总是比较安全的(这就是为什么SQL世界中有很多人喜欢代理主键,即使有一个看起来很自然的主键)。
我认为Django不允许您更改对象的主键。您可能必须删除原始对象。
根据Django docs
Django Docs
首先,应该确保主键为“1111111L”的对象已添加到表中。可能做了如下事情:
然后确保e3包含。一旦您确认它在那里,那么您就可以使用下面的语句去掉主键为“56789034U”的对象(假设您保持e2在附近):
相关问题 更多 >
编程相关推荐