class UsernameField CustomField forms CharField User username def __in

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 и дефис.'
def clean(self, value):
super(UsernameField, self).clean(value)
if not re.match(r'^[a-z][-a-z0-9]*[a-z0-9]$', value,re.I):
raise forms.ValidationError('В логине присутсвуют недопустимые символы')
try:
User.objects.get(username__exact=value)
except User.DoesNotExist:
return value
else:
raise forms.ValidationError('Этот логин уже занят')
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