Просмотр исходного кода

#12589: Move username validation from form to NetBoxUser

Jeremy Stretch 2 лет назад
Родитель
Сommit
79030ecab2
2 измененных файлов с 9 добавлено и 19 удалено
  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']:
             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):
     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.contenttypes.models import ContentType
 from django.contrib.postgres.fields import ArrayField
+from django.core.exceptions import ValidationError
 from django.core.validators import MinLengthValidator
 from django.db import models
 from django.db.models.signals import post_save
@@ -55,6 +56,14 @@ class NetBoxUser(User):
     def get_absolute_url(self):
         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):
     """