def CustomField(parent_class, model_class, model_field): class _CustomField(parent_class): def __init__(self, *args, **kwargs): super(_CustomField, self).__init__(*args, **kwargs) field = model_class._meta.get_field(model_field).formfield() for key in field.__dict__: setattr(self, key, field.__dict__[key]) return _CustomField class UsernameField(CustomField(forms.CharField, User, 'username')): def __init__(self, *args, **kwargs): super(UsernameField, self).__init__(*args, **kwargs) self.label = 'Логин на сайте' self.help_text = 'Вы можете использовать символы: a-z, 0-9 и дефис.'