Почему добавление дополнительных полей в этот виджет приводит к ошибке keyError?
Я работаю над формой в своем проекте Django. Я хотел добавить класс bootstrap к моим полям ввода. Я попытался сделать это с помощью следующего кода:
class CategoryForm(ModelForm):
class Meta:
model = Category
fields = '__all__'
labels = {
"sub_category":"Sub category (if any):"
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['category_name','sub_category','category_info','category_video'].widget.attrs.update({'class':'form-control'})
Но когда я загружаю страницу, я получаю следующее:
KeyError at /academy/category_form
('category_name', 'sub_category', 'category_info', 'category_video')
Неужели это невозможно? Должен ли я добавлять новую строку для каждого поля в моей форме? Например, так:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['category_name'].widget.attrs.update({'class':'form-control'})
self.fields['sub_category'].widget.attrs.update({'class':'form-control'})
self.fields['category_info'].widget.attrs.update({'class':'form-control'})
....
Это привело бы к длинным строкам кода, если бы мне пришлось делать это для каждой формы, что не имеет смысла, если следовать DRY.
Внутри формы fields
находится словарь, содержащий поля формы. Он делает не то, что вы ожидаете от него ... ваш список ключей интерпретируется как кортеж, и этот кортеж не содержится в полях формы, что приводит к упомянутому KeyError
.
Теперь к вашей попытке не повторяться... вы можете использовать цикл, чтобы избежать этого:
for key in ('category_name', 'sub_category', 'category_info', 'category_video'):
self.fields[key].widget.attrs.update({'class':'form-control'})