Django模型属性不更新

时间:2014-08-26 13:43:11

标签: django

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

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()

但测试失败了。我忽略了什么吗?

我在Ubuntu 14.04上使用PostgreSQL 9.3.5数据库运行Django 1.6.6

1 个答案:

答案 0 :(得分:3)

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

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

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