我听说过django orm hack。它就像这样
dp = SomeModel.objects.filter(type="customer").last()
dp.id = dp.id + 1 #changing id to a new one
dp.save()
如果使用的id值不存在,最后一步应该会创建一个新记录。如果存在递增的id,则save方法的作用类似于update方法。 例如::
dp.version += 1 #updating some random field
dp.save() # will change the newer version of dp.id
我想向django的退伍军人提出两个问题,为了我们的利益,
谢谢
答案 0 :(得分:3)
是的,将id
设为无。
dp = SomeModel.objects.filter(type="customer").last()
dp.id = None
dp.save()
答案 1 :(得分:2)
您应该将其设置为None,而不是递增pk。然后它将始终保存为新记录。
答案 2 :(得分:2)
last()
返回关于QuerySet
的排序的最后一个实例。此实例不保证使用最大的pk。如果确实如此,则无法保证在检索旧的最高pk和使用pk + 1
提交新实例之间不会创建其他实例。这样的实例将被新克隆覆盖。因此,不要手动设置新的pk,而是让数据库处理它。正如其他人所建议的那样,通过将pk设置为None
:
instance.pk = None
instance.save()