2009-10-06 158 views
1
thechan = Score.objects.filter(content=44)[0:1] 
thechan[0].custom_score = 2 
thechan[0].save() 

我做打印语句,它显示一切正常。但是,这不是拯救!为什么我无法在Django中保存对象?

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

select custom_score FROM music_score where content_id = 44; 

回答

11

这是怎么回事是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的元素而不是处理单个记录,则此区别变得更加重要。

0

固定。

thechan = Score.objects.get(content=44) 
thechan.custom_score = 2 
thechan.save() 
+0

呃......什么?代码如何工作? – harto 2009-10-06 23:48:49

+0

2警告:Django会为您提供:“MultipleObjectsReturned:get()返回多个Score”,如果超过1个“content”,将会抛出Object.DoesNotExist,如果没有结果。 – panchicore 2009-10-07 00:54:20

相关问题