Преобразование IntegerField в Int или Automated Testing, обеспечивающее значение> 0 - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь убедиться, что некоторые значения IntegerField неотрицательны.

Я создал такой класс (в файле моделей):

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, чтобы с ним можно было работать вфункции / тестирование.Есть ли способ заставить простые операторы «если» работать?(Если да, то как?) Или нужна альтернатива?(Если так, то что?)

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...