我有一个模特: -
class Model(models.Model):
a = models.BooleanField(default=False)
time = models.DateTimeField(auto_now_add=True)
触发all
查询后: -
objs = Model.objects.all().order_by('time')
我需要更新nth
索引处的对象。 N可以是任何东西。
obj[0].a = True
obj[0].save()
但价值不会更新。为什么呢?
答案 0 :(得分:0)
def set_nth_a_true(n, queryset):
obj_ = queryset[n]
obj_.a = True
obj_.save()
objs = Model.objects.all().order_by('time')
set_nth_a_true(3, objs)
这应该有效,我测试了它
答案 1 :(得分:0)
objs = Model.objects.all()
objs[0].a = True # Queries the database
objs[0].save() # And again queries db before save
更多信息为什么它会在文档中发生:
https://docs.djangoproject.com/ja/1.9/topics/db/queries/#when-querysets-are-not-cached
答案 2 :(得分:0)
我刚遇到同样的问题,我可以确认“问题”与QuerySets行为有关。如果需要更新对象,则必须将它们存储为单独的Model对象,如:
objs = Model.objects.all().order_by('time')
to_update = objs[0]
to_update.a = True
to_update.save()