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;
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;
这是怎么回事是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的元素而不是处理单个记录,则此区别变得更加重要。
固定。
thechan = Score.objects.get(content=44)
thechan.custom_score = 2
thechan.save()
呃......什么?代码如何工作? – harto 2009-10-06 23:48:49
2警告:Django会为您提供:“MultipleObjectsReturned:get()返回多个Score”,如果超过1个“content”,将会抛出Object.DoesNotExist,如果没有结果。 – panchicore 2009-10-07 00:54:20