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

时间:2009-10-06 23:29:49

标签: python django frameworks

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;

2 个答案:

答案 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()