Как установить CSS классы для всех входов формы в FormView?

class PetAddView(CreateView,LoginRequiredMixin):
    model = Pet
    fields = ['name','animal_type','breed','color','age','height','price','city','sex','photo']
    template_name = 'pets/pet-add.html'

    def get_form(self, form_class=None):
        form = self.get_form_class()(**self.get_form_kwargs())
        form.fields['photo'].widget.attrs.update({'onchange':'preview();'})
        for field in form.fields:
            form.fields[field].widget.attrs.update({'class':'form-control'})

        return form

Вот как я с этим справляюсь, но я ищу более элегантное решение. Мне нужно установить все классы ввода как 'form-control'. И было бы здорово сделать это в одной строке.

У меня были такие же сомнения при создании представления... самым приятным решением было создать специальную форму для этого случая и изменить поля там

Примеры полей: имя, описание, статус.

В файле forms.py

# forms.py
from django import forms

class ProductForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        ## FOR ALL FIELDS ##
        for field in self.fields:
            self.fields[field].widget.attrs = {
                'class': 'form-control'
            }

        ## SPECIFIC CLASS ##
        self.fields['name'].widget.attrs = {
            'class': 'class1'
        }
        self.fields['description'].widget.attrs = {
            'class': 'class2'
        }
        self.fields['status'].widget.attrs = {
            'class': 'class3'
        }

    class Meta:
        model = Product
        fields = [
            'name', 'description', 'status'
        ]

Теперь используйте форму, созданную в вашем представлении (views.py)

# On views.py
from .forms import ProductForm

class CreateProdutView(CreateView):
    form_class = ProductForm               # <- DeclaCreated Form
    template_name = '/form/product.html'   # <- Template 
    success_url = reverse_lazy('product')  # <- Import the reverse_lazy if you want
Вернуться на верх