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

PositiveSmallIntegerField

Поле PositiveSmallIntegerField предназначено для хранения целых положительных чисел в Django модели. Оно соответствует типу данных smallint в SQL с ограничением UNSIGNED. Данное поле гарантирует, что значение всегда будет неотрицательным. В зависимости от базы данных, диапазон допустимых значений может отличаться: в SQLite это -9223372036854775808 до 9223372036854775807, в PostgreSQL 0 до 32767, в MySQL 0 до 65535, в Oracle 0 до 32767. Это поле идеально подходит для хранения небольших счетчиков, рейтингов, количества товаров или других данных, которые не могут быть отрицательными.

При создании поля можно указать необязательные параметры: default - значение по умолчанию, null - разрешает или запрещает хранение NULL, blank - разрешает пустые значения в формах, validators - список валидаторов, verbose_name - человекочитаемое имя поля. По умолчанию null=False и blank=False. Все значения автоматически проходят валидацию на положительность при сохранении объекта в базу данных.

Синтаксис

from django.db import models class MyModel(models.Model): field_name = models.PositiveSmallIntegerField( default=0, null=False, blank=False, verbose_name="Название поля" )

Пример

Создадим модель Product с полем rating для хранения рейтинга товара:

from django.db import models class Product(models.Model): name = models.CharField(max_length=100) rating = models.PositiveSmallIntegerField(default=0) stock = models.PositiveSmallIntegerField(default=0) def __str__(self): return f"{self.name} - {self.rating}"

Создадим несколько товаров с рейтингом:

from myapp.models import Product # Create products with ratings product1 = Product.objects.create(name="Laptop", rating=5, stock=10) product2 = Product.objects.create(name="Mouse", rating=4, stock=25) product3 = Product.objects.create(name="Keyboard", rating=5, stock=15) res = Product.objects.all().values('name', 'rating', 'stock') for item in res: print(item)

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

{"name": "Laptop", "rating": 5, "stock": 10} {"name": "Mouse", "rating": 4, "stock": 25} {"name": "Keyboard", "rating": 5, "stock": 15}

Пример

Попробуем сохранить отрицательное значение в поле PositiveSmallIntegerField:

from myapp.models import Product from django.core.exceptions import ValidationError try: product = Product(name="Monitor", rating=-1, stock=5) product.full_clean() product.save() except ValidationError as e: print(e.message_dict)

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

{"rating": ["Ensure this value is greater than or equal to 0."]}

Пример

Выполним фильтрацию товаров по рейтингу с использованием PositiveSmallIntegerField:

from myapp.models import Product # Filter products with rating greater than 3 high_rated = Product.objects.filter(rating__gt=3) res = high_rated.values('name', 'rating') for item in res: print(item)

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

{"name": "Laptop", "rating": 5} {"name": "Mouse", "rating": 4} {"name": "Keyboard", "rating": 5}

Пример

Обновим значения поля для всех товаров с рейтингом 5, увеличив их на 1:

from myapp.models import Product from django.db.models import F # Increase rating for all products with rating 5 updated = Product.objects.filter(rating=5).update(rating=F('rating') + 1) print(updated) # Check the new ratings res = Product.objects.all().values('name', 'rating') for item in res: print(item)

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

2 {"name": "Laptop", "rating": 6} {"name": "Mouse", "rating": 4} {"name": "Keyboard", "rating": 6}

Пример

Используем агрегацию для подсчета суммы рейтингов и количества товаров:

from myapp.models import Product from django.db.models import Sum, Count, Avg # Aggregate statistics stats = Product.objects.aggregate( total_rating=Sum('rating'), product_count=Count('id'), avg_rating=Avg('rating') ) print(stats)

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

{"total_rating": 16, "product_count": 3, "avg_rating": 5.333333333333333}

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

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