为什么我不能在Django中保存对象?

TIM*_*MEX 1 python django frameworks

thechan = Score.objects.filter(content=44)[0:1]
thechan[0].custom_score = 2
thechan[0].save()
Run Code Online (Sandbox Code Playgroud)

我打印报表,它显示一切正常.但是,它并没有节省!

我进入我的数据库,我运行一个简单的SELECT语句..它没有改变!

select custom_score FROM music_score where content_id = 44;
Run Code Online (Sandbox Code Playgroud)

Dav*_*low 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
Run Code Online (Sandbox Code Playgroud)

如果出于某种原因你需要在QuerySet上执行此操作而不是仅使用get(),则可以编写:

thechan = Score.objects.filter(content=44)[0]
thechan.custom_score = 2
thechan.save()
Run Code Online (Sandbox Code Playgroud)

代替.如果您在迭代QuerySet的元素而不是处理单个记录时,这种区别变得更加重要.