【问题标题】:Strange issue when trying to set a BooleanField value in a django model尝试在 django 模型中设置 BooleanField 值时出现奇怪的问题
【发布时间】:2010-07-22 03:27:16
【问题描述】:

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

您似乎无法更改筛选条件的查询中的字段?

【问题讨论】:

  • 您为什么要这样做?如果您正在获取一个对象,为什么不使用 MyModel.objects.get
  • 我把它改成了.get,这似乎已经解决了。知道为什么吗?不能更改您过滤的字段吗?

标签: django django-models django-queryset


【解决方案1】:

问题不在于过滤,而在于切片。每次你对查询集进行切片时,Django 都会给你一个不同的对象:

f = MyModel.objects.all()[0]
f.id       # 1
id(f)      # 4326035152
ff = MyModel.objects.all()[0]
ff.id      # 1
id(ff)     # 4326035344

这里fff 指的是相同的底层数据库行,但不同的实际对象实例。因此,在您的示例中,您设置布尔值的实例与您尝试保存的实例不同。

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 2010-10-17
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2014-02-04
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多