我試圖重寫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 –