РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
17 of 818 menu

Поле PositiveIntegerField

Поле PositiveIntegerField применяется в моделях Django для хранения целых неотрицательных чисел. Оно наследуется от IntegerField и добавляет валидацию, гарантирующую, что значение всегда будет больше или равно нулю. Это поле идеально подходит для хранения возрастов, количеств, рейтингов, порядковых номеров и других числовых данных, которые не могут быть отрицательными. В базу данных оно преобразуется в целочисленный тип с проверкой на уровне приложения.

Основные параметры поля PositiveIntegerField включают max_length, который не применяется для числовых полей, но передается для совместимости, default для задания значения по умолчанию, null и blank для контроля обязательности, а также validators для добавления пользовательских проверок.

Синтаксис

from django.db import models class MyModel(models.Model): positive_num = models.PositiveIntegerField()

Пример

Создадим модель Product с полями для хранения цены в копейках и количества товара на складе:

from django.db import models class Product(models.Model): name = models.CharField(max_length=100) price_kopecks = models.PositiveIntegerField(default=0) stock_quantity = models.PositiveIntegerField(default=0) def __str__(self): return self.name

Результат создания объекта:

from myapp.models import Product product = Product.objects.create( name="Laptop", price_kopecks=150000, stock_quantity=25 ) print(f"{product.name}: {product.price_kopecks} kopecks, {product.stock_quantity} items")

Результат выполнения кода:

"Laptop: 150000 kopecks, 25 items"

Пример

Поле PositiveIntegerField автоматически проверяет, что значение неотрицательное. Попытка сохранить отрицательное число вызовет ошибку валидации:

from myapp.models import Product product = Product( name="Invalid Product", price_kopecks=-100, stock_quantity=10 ) product.full_clean()

Результат выполнения кода:

"django.core.exceptions.ValidationError: {'price_kopecks': ['Value must be a positive integer.']}"

Пример

Рассмотрим использование поля PositiveIntegerField с заданием значения по умолчанию и опциональностью:

from django.db import models class Review(models.Model): author = models.CharField(max_length=50) rating = models.PositiveIntegerField(default=0) likes = models.PositiveIntegerField(default=0, blank=True) def __str__(self): return f"Review by {self.author}"

Создадим несколько отзывов с различными значениями:

from myapp.models import Review review1 = Review.objects.create(author="Alice", rating=5) review2 = Review.objects.create(author="Bob", rating=3, likes=10) review3 = Review.objects.create(author="Charlie") print(f"{review1.author}: rating={review1.rating}, likes={review1.likes}") print(f"{review2.author}: rating={review2.rating}, likes={review2.likes}") print(f"{review3.author}: rating={review3.rating}, likes={review3.likes}")

Результат выполнения кода:

"Alice: rating=5, likes=0" "Bob: rating=3, likes=10" "Charlie: rating=0, likes=0"

Пример

Получение и фильтрация записей по полю PositiveIntegerField с использованием различных операторов поиска:

from myapp.models import Product # Получение товаров с количеством больше 10 high_stock = Product.objects.filter(stock_quantity__gt=10) for product in high_stock: print(f"{product.name}: {product.stock_quantity} items") # Получение товаров с ценой от 1000 до 5000 копеек mid_price = Product.objects.filter( price_kopecks__gte=1000, price_kopecks__lte=5000 ) print(f"Products in range: {mid_price.count()}")

Результат выполнения кода:

"Notebook: 25 items" "Mouse: 15 items" "Products in range: 2"

Смотрите также

  • поле IntegerField,
    которое хранит целые числа без ограничения на знак
  • поле PositiveSmallIntegerField,
    которое хранит положительные числа в диапазоне 0-32767
  • поле PositiveBigIntegerField,
    которое хранит большие положительные числа до 9223372036854775807
  • поле FloatField,
    которое хранит числа с плавающей точкой
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить