User monkeypatching (longer username) now works for admin as well
[flowspy] / monkey_patch / models.py
index a39d2a5..9fe1d6b 100644 (file)
@@ -1,13 +1,12 @@
-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)