将IntegerField转换为Int或自动测试,确保值> 0

时间:2019-01-20 17:22:30

标签: python django testing django-models

我正在尝试确保某些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”语句起作用? (如果是,如何?)还是需要替代方法? (如果是,那是什么?)

感谢您的帮助。

0 个答案:

没有答案