Вы можете использовать PositiveSmallIntegerField
[Django -doc] для хранения маленьких целых чисел. Django гарантирует, что минимальный диапазон составляет:
Как и PositiveIntegerField
, но допускает значения только в определенной (зависящей от базы данных) точке. Значения от 0 до 32767 безопасны во всех базах данных, поддерживаемых Django.
Таким образом, количество часов в неделю может быть представлено, поскольку в неделю 168 часов. Furhtmore Django проверит, что число является положительным, что означает, что оно вызовет ошибку в форме, если вы введете отрицательное число.
Кроме того, вы можете обогатить это с помощью валидатора, например:
from django.core.validators import <b>MaxValueValidator</b>
class MyModel(models.Model):
hours = models.PositiveIntegerField(
<b>validators=[MaxValueValidator(</b>168, 'There are only 168 hours a week.'<b>)],
default=40</b>
)
Здесь будет храниться количество часов в виде целого числа. Это означает, что вы можете хранить 39, 40 или 41, но не 40,5, например.
Для продолжительности c можно использовать DurationField
[Django -doc] . При этом значения на уровне Python преобразуются в объекты timedelta
, а на уровне базы данных используются interval
в базе данных PostgreSQL, Oracle и INTERVAL DAY(9) TO SECOND(6)
и т. Д. другие базы данных, он будет за занавесом использовать bigint
. Преимущество этого состоит в том, что, таким образом, оно представляет длительность в виде timedelta
, что делает удобным, например, выполнение арифметических операций c с datetime
объектами.