Написал декоратор класса, изменяет виджеты форм.
Не работает если init переопределена в форме, уходит в рекурсию
как быть? куда копать?
from django import forms
from users.models import User, Role
from django.contrib.auth.forms import AuthenticationForm
from django.utils.translation import ugettext_lazy as _
from .utils import field_attrs
@field_attrs({'class': 'form-control', 'required': 'required'})
class EditUserForm(forms.ModelForm):
class Meta:
model = User
fields = ['group', 'role']
def __init__(self, *args, **kwargs):
super(EditUserForm, self).__init__(*args, **kwargs)
self.fields['group'].empty_label = 'Выберите группу'
@field_attrs({'class': 'form-control', 'required': 'required'})
class EditRoleForm(forms.ModelForm):
class Meta:
model = Role
fields = ['name', 'form']
@field_attrs({'class': 'form-control', 'required': 'required'},
username={'placeholder': 'Логин'},
password={'placeholder': 'Пароль'})
class AuthForm(AuthenticationForm):
username = forms.CharField(max_length=100)
password = forms.CharField(label=_("Пароль"), widget=forms.PasswordInput())
def field_attrs(all_attrs, **fargs):
def decorator(obj):
class Cls(obj):
def __init__(self, *args, **kwargs):
super(Cls, self).__init__(*args, **kwargs)
for k in self.fields:
self.fields[k].widget.attrs.update(all_attrs)
for k in fargs:
self.fields[k].widget.attrs.update(fargs[k])
return Cls
return decorator