Browse Source

#12589: Move username validation from form to NetBoxUser

Jeremy Stretch 2 years ago
parent
commit
79030ecab2
2 changed files with 9 additions and 19 deletions
  1. 0 19
      netbox/users/forms/model_forms.py
  2. 9 0
      netbox/users/models.py

+ 0 - 19
netbox/users/forms/model_forms.py

@@ -229,25 +229,6 @@ class UserForm(BootstrapMixin, forms.ModelForm):
         if self.cleaned_data['password'] and self.cleaned_data['password'] != self.cleaned_data['confirm_password']:
         if self.cleaned_data['password'] and self.cleaned_data['password'] != self.cleaned_data['confirm_password']:
             raise forms.ValidationError(_("Passwords do not match! Please check your input and try again."))
             raise forms.ValidationError(_("Passwords do not match! Please check your input and try again."))
 
 
-    # TODO: Move this logic to the NetBoxUser class
-    def clean_username(self):
-        """Reject usernames that differ only in case."""
-        instance = getattr(self, 'instance', None)
-        if instance:
-            qs = self._meta.model.objects.exclude(pk=instance.pk)
-        else:
-            qs = self._meta.model.objects.all()
-
-        username = self.cleaned_data.get("username")
-        if (
-            username and qs.filter(username__iexact=username).exists()
-        ):
-            raise forms.ValidationError(
-                _("user with this username already exists")
-            )
-
-        return username
-
 
 
 class GroupForm(BootstrapMixin, forms.ModelForm):
 class GroupForm(BootstrapMixin, forms.ModelForm):
     users = DynamicModelMultipleChoiceField(
     users = DynamicModelMultipleChoiceField(

+ 9 - 0
netbox/users/models.py

@@ -5,6 +5,7 @@ from django.conf import settings
 from django.contrib.auth.models import Group, GroupManager, User, UserManager
 from django.contrib.auth.models import Group, GroupManager, User, UserManager
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.postgres.fields import ArrayField
 from django.contrib.postgres.fields import ArrayField
+from django.core.exceptions import ValidationError
 from django.core.validators import MinLengthValidator
 from django.core.validators import MinLengthValidator
 from django.db import models
 from django.db import models
 from django.db.models.signals import post_save
 from django.db.models.signals import post_save
@@ -55,6 +56,14 @@ class NetBoxUser(User):
     def get_absolute_url(self):
     def get_absolute_url(self):
         return reverse('users:netboxuser', args=[self.pk])
         return reverse('users:netboxuser', args=[self.pk])
 
 
+    def clean(self):
+        super().clean()
+
+        # Check for any existing Users with names that differ only in case
+        model = self._meta.model
+        if model.objects.exclude(pk=self.pk).filter(username__iexact=self.username).exists():
+            raise ValidationError(_("A user with this username already exists."))
+
 
 
 class NetBoxGroup(Group):
 class NetBoxGroup(Group):
     """
     """