我正在尝试更新几个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
答案 0 :(得分:3)
没有理由这样做。 Django模型实例没有标识 - 也就是说,单独的实例是单独的对象,即使它们引用相同的数据库行。在您的代码中,a
和b
与instance
内updateBar
的各种值不同,因为它们来自不同的数据库查询。
如果要检查数据库是否确实已更新,则需要在修改后重新获取a
和b
:
a = Foo.objects.get(pk=a.pk)
b = Foo.objects.get(pk=b.pk)
self.assert...