我在使用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}]
但第二个回归:
[]
有任何线索吗?非常感谢
答案 0 :(得分:1)
QuerySet.values
实际上不返回列表,它返回查询集的副本。每次迭代它(例如print
做什么)它都会命中db,所以第二个打印在delete
之后重新执行查询。
你应该做的是:
response_data['listofrelatedstepsid'] = list(listofrelatedstepsid)
答案 1 :(得分:0)
值(*字段)
返回一个ValuesQuerySet - 一个QuerySet子类 在用作可迭代的时返回字典,而不是 模型实例对象。
为了解决您的问题,您必须使用relatedsteps.values('id')
作为可迭代,在其上调用list或tuple对您来说完全没问题:
response_data['listofrelatedstepsid'] = list(listofrelatedstepsid)
print(response_data['listofrelatedstepsid'])
relatedsteps.delete()
print(response_data['listofrelatedstepsid'])