Python 在Django中删除对象后将数据保留在变量中

Python 在Django中删除对象后将数据保留在变量中,python,django,Python,Django,我在Django 1.9上 我希望在删除具有这些ID的对象后保留一个ID列表(发送回Ajax函数) 但是因为我删除了这些对象,列表也被清空了 这是我的密码: relatedsteps = Step.objects.filter(theplace=theplaceclicked) listofrelatedstepsid = relatedsteps.values('id') response_data = {} response_data['listofrelatedstepsid'] = li

我在Django 1.9上

我希望在删除具有这些ID的对象后保留一个ID列表(发送回Ajax函数)

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

这是我的密码:

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}]
但第二个结果是:

[]

有线索吗?非常感谢

查询集。值
实际上并不返回列表,而是返回查询集的克隆。每次迭代时(例如,
print
所做的事情),它都会命中数据库,因此第二次打印会在
delete
之后重新执行查询

你应该做的是:

response_data['listofrelatedstepsid'] = list(listofrelatedstepsid)
如中所述

值(*字段)

返回一个ValuesQuerySet-一个查询集子类 当用作iterable时返回字典,而不是 模型实例对象

因此,要解决您的问题,您必须使用
relatedsteps.values('id')
作为iterable,调用或使用它对您来说是完全合适的:

response_data['listofrelatedstepsid'] = list(listofrelatedstepsid)

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

您不必使用
copy