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