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

Виджет NumberInput

Виджет NumberInput применяется для отображения поля ввода числовых значений в формах Django. Он генерирует HTML-элемент <input type="number">, который обеспечивает встроенную валидацию чисел на стороне браузера и удобные элементы управления для увеличения или уменьшения значения. Виджет поддерживает атрибуты min, max и step для ограничения допустимых значений.

Синтаксис

from django import forms from django.forms.widgets import NumberInput class MyForm(forms.Form): age = forms.IntegerField(widget=NumberInput(attrs={'min': 1, 'max': 100}))

Пример

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

from django import forms from django.forms.widgets import NumberInput class UserAgeForm(forms.Form): age = forms.IntegerField( label="Ваш возраст", widget=NumberInput(attrs={ 'min': 18, 'max': 65, 'class': 'form-control', 'placeholder': 'Введите возраст' }) )

Результат HTML-рендеринга формы:

<input type="number" name="age" min="18" max="65" class="form-control" placeholder="Введите возраст" id="id_age">

Пример

Использование виджета в ModelForm для модели продукта с ценой и скидкой:

from django import forms from django.forms.widgets import NumberInput from myapp.models import Product class ProductForm(forms.ModelForm): class Meta: model = Product fields = ['name', 'price', 'discount'] widgets = { 'price': NumberInput(attrs={ 'min': 0.01, 'step': 0.01, 'class': 'price-input' }), 'discount': NumberInput(attrs={ 'min': 0, 'max': 100, 'step': 1, 'class': 'discount-input' }), }

Результат рендеринга полей:

<input type="number" name="price" min="0.01" step="0.01" class="price-input" id="id_price"> <input type="number" name="discount" min="0" max="100" step="1" class="discount-input" id="id_discount">

Пример

Обработка данных и валидация в представлении для формы с числовым полем:

from django.shortcuts import render from django.http import HttpResponseRedirect from django import forms from django.forms.widgets import NumberInput class TemperatureForm(forms.Form): temperature = forms.FloatField( label="Температура (°C)", widget=NumberInput(attrs={ 'min': -50, 'max': 50, 'step': 0.5, 'class': 'temp-input' }) ) def temperature_view(request): if request.method == 'POST': form = TemperatureForm(request.POST) if form.is_valid(): temp = form.cleaned_data['temperature'] if temp > 30: message = "Жарко! Рекомендуем кондиционер." elif temp < 0: message = "Холодно! Одевайтесь теплее." else: message = "Комфортная температура." return render(request, 'result.html', {'message': message}) else: form = TemperatureForm() return render(request, 'temperature.html', {'form': form})

Результат обработки введенного значения:

"Жарко! Рекомендуем кондиционер."

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

  • виджет TextInput,
    используемый для ввода текстовых данных
  • виджет DateInput,
    используемый для ввода дат
  • виджет DateTimeInput,
    используемый для ввода даты и времени
  • поле IntegerField,
    которое часто используется с NumberInput для целых чисел
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить