最近的Django项目中有复制记录的需求,就是记录定时巡检表,在主任务下面,到时间就增加一条子任务,任务内容相同,就是主键id要改变。
我的方法如下:
def set_sub_inspect_task(taskid, start_time):
task = inspect_model.InspectTask.objects.get(id=taskid)
task.id = None
task.start_time = start_time
task.parent_task = taskid
task.sub_task = 1
task.save()
return task.id
task.id = None
后,对于一个要新加入数据库的model实例,在save()执行之前是无法知道它的id的,因为要算数据库中已有多少个本model才能算出它的id值。这样的话在这里task对象指向已经发生了变化,指向task.id = None
,这样就相当于克隆了task = inspect_model.InspectTask.objects.get(id=taskid)
这条查询结果,新增了一个id,而其它信息是一样的。
参考链接:
DJANGO复制记录的方法