我正在尝试确保某些IntegerField值是非负的。
我已经创建了一个这样的类(在models文件中):
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
#solution block attempts are inserted here
我想确保观点和喜欢不是负面的。测试功能是:
class CategoryMethodTests(TestCase):
def test_enusre_views_are_positive(self):
"""
ensure_views_are_positive should result
True for Categories where view are zero or positive
"""
cat = Category(name='test', views=-1, likes=0)
cat.save()
self.assertEqual((cat.views >= 0), True)
我尝试了以下解决方案,将其插入到Category类的注释行中,并发布与每种解决方案相对应的错误:
第一次尝试:
if views < 0:
views = 0
TypeError: '<' not supported between instances of 'IntegerField' and 'int'
第二次尝试:
if int(views) < 0:
views = 0
TypeError: int() argument must be a string, a bytes-like object or a number, not 'IntegerField'
第三次尝试:
@property
def ensure_views_are_positive(self):
if self.views < 0:
views = 0
return views
这没有收到任何错误消息,但是测试失败:
AsssertionError: False != True
可能是因为我没有在任何地方调用该函数。我不太确定在哪里调用它(并且希望在课堂上将其自动化)。
我觉得必须有一种简单的方法将IntegerField数据转换为int,以便可以在函数/测试中使用它。有没有办法使简单的“ if”语句起作用? (如果是,如何?)还是需要替代方法? (如果是,那是什么?)
感谢您的帮助。