IntegerField

Поле IntegerField в Django формах предназначено для обработки целочисленных данных. Оно автоматически преобразует входные данные в целое число и выполняет валидацию, проверяя что введенное значение является допустимым целым числом. Поле принимает необязательные параметры для ограничения диапазона значений: min_value и max_value, а также стандартные параметры форм, такие как required, label, initial и другие.

Синтаксис

pythonfrom django import forms

class MyForm(forms.Form):
  field_name = forms.IntegerField(
    min_value=0,
    max_value=100,
    required=True,
    label="Number",
    initial=0,
  )

Пример

Создадим простую форму для ввода возраста пользователя с ограничением от 0 до 150:

pythonfrom django import forms

class AgeForm(forms.Form):
  age = forms.IntegerField(
    min_value=0,
    max_value=150,
    label="Your age",
    help_text="Enter your age (0-150)",
  )

Результат создания экземпляра формы:

pythonform = AgeForm()
print(form.as_p())

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

python"<p><label for="id_age">Your age:</label> <input type="number" name="age" min="0" max="150" required id="id_age"></p>"

Пример

Рассмотрим обработку данных из формы с валидацией поля:

pythonfrom django import forms

class ProductForm(forms.Form):
  price = forms.IntegerField(
    min_value=1,
    max_value=1000000,
    label="Price in cents",
    required=True,
  )
  
  quantity = forms.IntegerField(
    min_value=1,
    max_value=1000,
    label="Quantity",
    initial=1,
  )
  
  def clean_price(self):
    price = self.cleaned_data.get('price')
    if price < 0:
      raise forms.ValidationError("Price cannot be negative")
    return price

Пример обработки валидных и невалидных данных:

python# Valid data
form = ProductForm({'price': '500', 'quantity': '10'})
if form.is_valid():
  print("Valid form data:")
  print(f"Price: {form.cleaned_data['price']}")
  print(f"Quantity: {form.cleaned_data['quantity']}")

# Invalid data (price too high)
form = ProductForm({'price': '9999999', 'quantity': '5'})
print(f"Is form valid? {form.is_valid()}")
print(f"Errors: {form.errors}")

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

python"Valid form data:"
"Price: 500"
"Quantity: 10"
"Is form valid? False"
"Errors: {'price': ['Ensure this value is less than or equal to 1000000.']}"

Пример

Использование IntegerField с моделью через ModelForm:

pythonfrom django.db import models
from django import forms

class Book(models.Model):
  title = models.CharField(max_length=200)
  pages = models.IntegerField()
  published_year = models.IntegerField()
  
  def __str__(self):
    return self.title

class BookForm(forms.ModelForm):
  class Meta:
    model = Book
    fields = ['title', 'pages', 'published_year']
    widgets = {
      'pages': forms.NumberInput(attrs={'min': 1, 'max': 5000}),
      'published_year': forms.NumberInput(attrs={'min': 1900, 'max': 2026}),
    }

Пример создания и сохранения объекта модели через форму:

python# Create form with valid data
form_data = {
  'title': 'Django Handbook',
  'pages': '500',
  'published_year': '2024',
}
form = BookForm(form_data)

if form.is_valid():
  book = form.save()
  print(f"Book created: {book.title}")
  print(f"Pages: {book.pages}")
  print(f"Year: {book.published_year}")

# Try invalid data (negative pages)
invalid_form = BookForm({'title': 'Invalid Book', 'pages': '-10', 'published_year': '2025'})
if not invalid_form.is_valid():
  print(f"Invalid form errors: {invalid_form.errors}")

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

python"Book created: Django Handbook"
"Pages: 500"
"Year: 2024"
"Invalid form errors: {'pages': ['Ensure this value is greater than or equal to 1.']}"

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

  • поле FloatField,
    которое используется для чисел с плавающей точкой
  • поле DecimalField,
    которое используется для десятичных чисел с фиксированной точностью
  • поле ChoiceField,
    которое используется для выбора из предопределенного списка значений
  • метод is_valid,
    который проверяет валидность данных формы