-from django.contrib.auth.models import User
+from django.utils.translation import ugettext as _
+from django.db.models.signals import class_prepared
from django.core.validators import MaxLengthValidator
+from flowspy.monkey_patch import MAX_USERNAME_LENGTH
-NEW_USERNAME_LENGTH = 255
-
-def monkey_patch_username():
- username = User._meta.get_field("username")
- username.max_length = NEW_USERNAME_LENGTH
- for v in username.validators:
- if isinstance(v, MaxLengthValidator):
- v.limit_value = NEW_USERNAME_LENGTH
-
-monkey_patch_username()
+def longer_username(sender, *args, **kwargs):
+ if sender.__name__ == "User" and sender.__module__ == "django.contrib.auth.models":
+ sender._meta.get_field("username").max_length = MAX_USERNAME_LENGTH()
+ # For Django 1.2 to work, the validator has to be declared apart from max_length
+ sender._meta.get_field("username").validators = [MaxLengthValidator(MAX_USERNAME_LENGTH())]
+ sender._meta.get_field("username").help_text = _("Required, %s characters or fewer. Only letters, numbers, and @, ., +, -, or _ characters." % MAX_USERNAME_LENGTH())
+class_prepared.connect(longer_username)