我试图重写save()
方法,因此Category
类的字段views
只接受正数或零。 (这是一个从Tango with Django 1.7 Chapter 20练习)Django:在模型中覆盖save()方法
models.py:
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
like = models.IntegerField(default=0)
slug = models.SlugField(unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
if self.views < 0:
return
else:
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "Categories"
test.py:
class CategoryMethodTests(TestCase):
def test_ensure_views_are_positive(self):
"""
ensure_views_are_positive should return True for categories where views are zero or positive
"""
cat = Category(name='test', views=-1, like=0)
cat.save()
self.assertEqual((cat.views >= 0), True)
即使我加入了条件if self.views < 0
在models.py
测试失败:
Creating test database for alias 'default'...
F
======================================================================
FAIL: test_ensure_views_are_positive (rango.tests.CategoryMethodTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/pm/tango_project/rango/tests.py", line 11, in test_ensure_views_are_positive
self.assertEqual((cat.views >= 0), True)
AssertionError: False != True
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
Destroying test database for alias 'default'...
问题在哪里?
为什么self.assertEqual()使用self.assertTrue(),和Django的有PositiveIntegertField https://docs.djangoproject.com/en/1.8/REF /模型/场/#positiveintegerfield –