我有以下代码
exinfo = ExistingCardInfo.objects.filter(CustID=custid)
trail4 = exinfo[0].trail4
logger.debug(exinfo[0].trail4) # prints 1984
exinfo[0].trail4=3000
logger.debug(exinfo[0].trail4) # again prints 1984
最初的trail4值是1984.在我将trail4值设置为3000后,我仍然得到了1984。 上面的代码有什么问题吗?
答案 0 :(得分:3)
索引查询集会重新运行查询。提取单个模型,修改字段,保存模型,然后重新索引。
答案 1 :(得分:0)
在通过索引访问查询集属性时,尝试将值分配给查询集属性时,我遇到过与您类似的情况。
你可以试试像:
excardinfo = exinfo[0]
excardinfo.trail4 = 3000
excardinfo.save()
答案 2 :(得分:0)
正如其他一些答案所说,索引查询集会导致django再次访问数据库。
如果您不想将更改保存到数据库(在这种情况下,您不希望使用.save()),则提取该模型并将其保存到变量:
thismodel = exinfo[0]
print thismodel.trail4
thismodel.trail4 = 3000
print thismodel.trail4
以上将打印1984和3000.它不会保存到数据库,因此存储在数据库中的行保持不变。
答案 3 :(得分:0)
我同意@ dm03514在过滤器只是查询集后得到的内容,您在其中所做的任何更改都不会反映在数据库中。 要反映数据库中的更改,请在对象上使用.save()函数。