from django import forms from warehouse.models import Material from .models import Deal class ProductionTaskCreateForm(forms.Form): drawing_name = forms.CharField(label="Наименование детали", max_length=255, required=False) quantity_ordered = forms.IntegerField(label="Требуется (шт)", min_value=1) size_value = forms.FloatField(label="Размер (мм)", min_value=0) is_bend = forms.BooleanField(label="Гибка", required=False) drawing_file = forms.FileField(label="Исходник (DXF/IGES)", required=False) extra_drawing = forms.FileField(label="Доп. чертеж (PDF)", required=False) deal = forms.ModelChoiceField( label="Сделка", queryset=Deal.objects.all().order_by("number"), required=True, empty_label="— выбрать —", ) material = forms.ModelChoiceField( label="Материал", queryset=Material.objects.all().order_by("full_name"), required=True, empty_label="— выбрать —", ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) existing = self.fields["drawing_name"].widget.attrs.get("class", "") self.fields["drawing_name"].widget.attrs["class"] = (existing + " w-100").strip() def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Приводим поля формы к единому Bootstrap-оформлению. # Это решает проблему, когда input «Наименование» выглядит как стандартный HTML и не занимает всю ширину. for name, field in self.fields.items(): w = field.widget if isinstance(w, forms.CheckboxInput): w.attrs.setdefault('class', 'form-check-input') elif isinstance(w, (forms.Select, forms.SelectMultiple)): w.attrs.setdefault('class', 'form-select border-secondary') else: w.attrs.setdefault('class', 'form-control border-secondary') # Явно делаем поле «Наименование детали» растягиваемым на всю ширину. self.fields['drawing_name'].widget.attrs['class'] += ' w-100'