Почему декоратор уходит в рекурсию?

Написал декоратор класса, изменяет виджеты форм.
Не работает если 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
  • Вопрос задан
  • 362 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы