【发布时间】:2014-11-10 17:24:16
【问题描述】:
我有一个 Django 模型,它有一个重写的保存方法,以确保同时只为这个模型的一个实例设置一个特殊字段(标志)。
class MyModel(models.Model):
flag = models.BooleanField(default=False)
def save(self, *args, **kwargs):
if self.flag:
for o in MyModel.objects.filter(flag=True):
if o != self:
o.flag = False
o.save()
super(MyModel, self).save(*args, **kwargs)
然后我编写了一个测试来确保预期的行为有效。
from django.test import TestCase
from myapp.models import MyModel
class MyAppFlag(TestCase):
def test_flag_is_set_only_once(self):
o1 = MyModel(flag=True)
o1.save()
self.assertEqual(o1.flag, True)
o2 = MyModel(flag=True)
o2.save()
self.assertEqual(o2.flag, True)
self.assertEqual(o1.flag, False)
不幸的是,最后一个断言失败了。我不明白为什么,因为通常它在管理界面中测试行为时起作用(即不在测试套件中)。
我做错了吗?
【问题讨论】:
标签: python django testing django-models