2 from django.core.validators import MaxLengthValidator
3 from django.utils.translation import ugettext as _
4 from django.db.models.signals import class_prepared
5 from django.conf import settings
6 from longerusername import MAX_USERNAME_LENGTH
8 def longer_username_signal(sender, *args, **kwargs):
9 if (sender.__name__ == "User" and
10 sender.__module__ == "django.contrib.auth.models"):
11 patch_user_model(sender)
12 class_prepared.connect(longer_username_signal)
14 def patch_user_model(model):
15 field = model._meta.get_field("username")
17 field.max_length = MAX_USERNAME_LENGTH()
18 #field.help_text = _("Required, %s characters or fewer. Only letters, "
19 # "numbers, and @, ., +, -, or _ "
20 # "characters." % MAX_USERNAME_LENGTH())
22 # patch model field validator because validator doesn't change if we change
24 for v in field.validators:
25 if isinstance(v, MaxLengthValidator):
26 v.limit_value = MAX_USERNAME_LENGTH()
28 from django.contrib.auth.models import User
30 # https://github.com/GoodCloud/django-longer-username/issues/1
31 # django 1.3.X loads User model before class_prepared signal is connected
32 # so we patch model after it's prepared
34 # check if User model is patched
35 if User._meta.get_field("username").max_length != MAX_USERNAME_LENGTH():
36 patch_user_model(User)