删除Django中的对象后,将数据保存在变量中

时间:2016-12-12 18:27:08

标签: python django

我在使用Django 1.9

在删除具有这些ID的对象(要发送回Ajax函数)之后,我想保留一个id列表。

但是因为我删除了这些对象,所以列表也被清空了。

这是我的代码:

relatedsteps = Step.objects.filter(theplace=theplaceclicked)
listofrelatedstepsid = relatedsteps.values('id')
response_data = {}
response_data['listofrelatedstepsid'] = listofrelatedstepsid
print(response_data['listofrelatedstepsid'])
relatedsteps.delete()
print(response_data['listofrelatedstepsid'])

第一个

print(response_data['listofrelatedstepsid'])

返回

[{u'id': 589}]

但第二个回归:

[]

有任何线索吗?非常感谢

2 个答案:

答案 0 :(得分:1)

QuerySet.values实际上不返回列表,它返回查询集的副本。每次迭代它(例如print做什么)它都会命中db,所以第二个打印在delete之后重新执行查询。

你应该做的是:

response_data['listofrelatedstepsid'] = list(listofrelatedstepsid)

答案 1 :(得分:0)

django documentation

中所述
  

值(*字段)

     

返回一个ValuesQuerySet - 一个QuerySet子类   在用作可迭代的时返回字典,而不是   模型实例对象。

为了解决您的问题,您必须使用relatedsteps.values('id')作为可迭代,在其上调用listtuple对您来说完全没问题:

response_data['listofrelatedstepsid'] = list(listofrelatedstepsid)

print(response_data['listofrelatedstepsid'])
relatedsteps.delete()
print(response_data['listofrelatedstepsid'])