Django模型属性未更新

Django模型属性未更新,django,Django,我正在尝试更新我的几个foo模型实例的bar属性: class Foo(models.Model): ... bar = models.BooleanField(default=True) baz = models.CharField() def updateBar(self): foo.objects.filter(baz='yes').update(bar=False) ... 但我的测试一直失败: def test_upda

我正在尝试更新我的几个
foo
模型实例的
bar
属性:

class Foo(models.Model):

    ...

    bar = models.BooleanField(default=True)
    baz = models.CharField()

    def updateBar(self):
        foo.objects.filter(baz='yes').update(bar=False)

    ...
但我的测试一直失败:

def test_update_bar(self):
    a = Foo.objects.create(bar=True, baz='yes', ...)
    b = Foo.objects.create(bar=True, baz='yes', ...)
    a.updateBar()
    self.assertFalse(a.bar)
    self.assertFalse(b.bar)
我也试着这样做:

def updateBar(self):
    instances = Foo.objects.filter(baz='yes')
    for instance in instances:
        instance.baz = False
        instance.save()
但测试仍然失败。我是不是忽略了什么


我使用PostgreSQL 9.3.5数据库在Ubuntu 14.04上运行Django 1.6.6,没有理由这样做。Django模型实例没有标识——也就是说,单独的实例是单独的对象,即使它们引用相同的数据库行。在您的代码中,
a
b
instance
updateBar
的不同值不是相同的对象,因为它们来自不同的数据库查询

如果要检查数据库是否确实已更新,则需要在修改后重新获取
a
b

a = Foo.objects.get(pk=a.pk)
b = Foo.objects.get(pk=b.pk)
self.assert...

没有理由这样做。Django模型实例没有标识——也就是说,单独的实例是单独的对象,即使它们引用相同的数据库行。在您的代码中,
a
b
instance
updateBar
的不同值不是相同的对象,因为它们来自不同的数据库查询

如果要检查数据库是否确实已更新,则需要在修改后重新获取
a
b

a = Foo.objects.get(pk=a.pk)
b = Foo.objects.get(pk=b.pk)
self.assert...

没有理由这样做。Django模型实例没有标识——也就是说,单独的实例是单独的对象,即使它们引用相同的数据库行。在您的代码中,
a
b
instance
updateBar
的不同值不是相同的对象,因为它们来自不同的数据库查询

如果要检查数据库是否确实已更新,则需要在修改后重新获取
a
b

a = Foo.objects.get(pk=a.pk)
b = Foo.objects.get(pk=b.pk)
self.assert...

没有理由这样做。Django模型实例没有标识——也就是说,单独的实例是单独的对象,即使它们引用相同的数据库行。在您的代码中,
a
b
instance
updateBar
的不同值不是相同的对象,因为它们来自不同的数据库查询

如果要检查数据库是否确实已更新,则需要在修改后重新获取
a
b

a = Foo.objects.get(pk=a.pk)
b = Foo.objects.get(pk=b.pk)
self.assert...

看起来您的
baz
是一个charfield。您是否打算执行self.assertFalse(a.bar)?此外,您只设置了
字段,而
baz
仍然具有值
哇,我的坏。修正了,你能把所有的列都放到模型里,这样我们就可以看到你在用什么了吗?另外,
updateBar
中的小写
foo
是打字错误,对吗?@yedpodtrzitko我希望这次编辑能让它更清晰。看起来你的
baz
是一个字符域。您是否打算执行self.assertFalse(a.bar)?此外,您只设置了
字段,而
baz
仍然具有值
哇,我的坏。修正了,你能把所有的列都放到模型里,这样我们就可以看到你在用什么了吗?另外,
updateBar
中的小写
foo
是打字错误,对吗?@yedpodtrzitko我希望这次编辑能让它更清晰。看起来你的
baz
是一个字符域。您是否打算执行self.assertFalse(a.bar)?此外,您只设置了
字段,而
baz
仍然具有值
哇,我的坏。修正了,你能把所有的列都放到模型里,这样我们就可以看到你在用什么了吗?另外,
updateBar
中的小写
foo
是打字错误,对吗?@yedpodtrzitko我希望这次编辑能让它更清晰。看起来你的
baz
是一个字符域。您是否打算执行self.assertFalse(a.bar)?此外,您只设置了
字段,而
baz
仍然具有值
哇,我的坏。修正了,你能把所有的列都放到模型里,这样我们就可以看到你在用什么了吗?另外,
updateBar
中的小写
foo
也是打字错误,对吗?@yedpodtrzitko我希望这次编辑能让它更清楚