我正在尝试在我的一个模型中更改BooleanField的值,但Django不会让我。这是相关的代码:
query = MyModel.objects.filter(name='example').filter(boolField=False)
print query[0].boolField
query[0].boolField = True
query[0].save()
print query[0].boolField
令人惊讶的是:
False
False
知道为什么= True
没有坚持?提前谢谢!
编辑:修正了它:
query = MyModel.objects.get(name='example', boolField=False)
query.boolField = True
query.save()
您似乎无法更改过滤的查询中的字段?
答案 0 :(得分:7)
这不是过滤问题,而是切片。每次切片查询集时,Django都会为您提供不同的对象:
f = MyModel.objects.all()[0]
f.id # 1
id(f) # 4326035152
ff = MyModel.objects.all()[0]
ff.id # 1
id(ff) # 4326035344
此处f
和ff
引用相同的基础数据库行,但不同的实际对象实例。因此,在您的示例中,您设置布尔值的实例与您尝试保存的实例不同。