Как установить 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