thechan = Score.objects.filter(content=44)[0:1]
thechan[0].custom_score = 2
thechan[0].save()
我打印报表,它显示一切正常。然而,这并没有节省!
我进入我的数据库,然后运行一个简单的 SELECT 语句......它没有改变!
select custom_score FROM music_score where content_id = 44;
请您参考如下方法:
这里发生的事情是 Score.objects.filter() 不返回常规列表,而是返回 QuerySet。 . QuerySet 在某些方面表现得像列表,但每次对一个进行切片时,都会得到一个新的 QuerySet 实例,而每次对一个进行索引时,都会得到模型类的一个新实例。
这意味着您的原始代码执行如下操作:
thechan = Score.objects.filter(content=44)[0:1]
thechan[0].custom_score = 2
thechan = Score.objects.filter(content=44)[0:1]
thechan[0].save() # saves an unmodified object back to the DB, no effective change
如果出于某种原因你需要在 QuerySet 上执行此操作而不是仅仅使用 get(),你可以这样写:
thechan = Score.objects.filter(content=44)[0]
thechan.custom_score = 2
thechan.save()
相反。例如,如果您要遍历 QuerySet 的元素而不是处理单个记录,这种区别就变得更加重要。
