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;
答案 0 :(得分:12)
这里发生的是Score.objects.filter()不返回常规列表,而是返回QuerySet。 QuerySets在某些方面表现得像列表,但每次切片时都会得到一个新的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的元素而不是处理单个记录时,这种区别变得更加重要。
答案 1 :(得分:0)
固定。
thechan = Score.objects.get(content=44)
thechan.custom_score = 2
thechan.save()