尝试在django模型中设置BooleanField值时出现奇怪的问题

时间:2010-07-22 03:27:17

标签: django django-models django-queryset

我正在尝试在我的一个模型中更改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()

您似乎无法更改过滤的查询中的字段?

1 个答案:

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

此处fff引用相同的基础数据库行,但不同的实际对象实例。因此,在您的示例中,您设置布尔值的实例与您尝试保存的实例不同。