Как проверить, является ли переменная буквенно-цифровой, если выполнено определенное условие

Я пытаюсь проверить, равна ли длина имени пользователя 7. Если условие выполнено, то я хочу проверить, является ли оно буквенно-цифровым. Если нет, то я хочу вернуть ошибку, описанную ниже.

Вы ввели неверное имя пользователя

Вот мой код

def clean(self):
        super(Register, self).clean()
        password = self.cleaned_data.get('password')
        password2 = self.cleaned_data.get('password2')
        username = self.cleaned_data.get('username')
        email = self.cleaned_data.get('email')

        
        if password.islower():
            self.errors[''] = self.error_class(["Password must contain an uppercase"])
        
        elif password.isnumeric():
            self.errors[''] = self.error_class(["Password must contain an alphabet"])

        elif password.isalpha():
            self.errors[''] = self.error_class(["Password must contain a number"])

        elif len(password) < 8:
            self.errors[''] = self.error_class(["Password is too short"])

        elif password != password2:
            self.errors[''] = self.error_class(["The two password fields must match"])

        elif len(username) !=7  and len(username) != 9:
            self.errors[''] = self.error_class(["You have entered an invalid username"])

        else:
            pass
        
        try:
            if len(username) == 9:
                username = int(username)
        except ValueError:
            self.errors[''] = self.error_class(["You have entered an invalid username"])

        if len(username) == 7:
            if username.isalnum() is False:
                self.errors[''] = self.error_class(["Youuuu have entered an invalid username"])
            else:
                pass
        else:
            self.errors[''] = self.error_class(["You have entered an invalid username"])

        for instance in User.objects.all():
            if instance.username == username:
                self.errors[''] = self.error_class(["User already exist"])
            elif instance.email == email:
                self.errors[''] = self.error_class(["E-mail already in use"])
            else:
                pass

        return self.cleaned_data

Нет места, чтобы вставить это в комментарии, поэтому я постараюсь сначала ответить на вопрос.

Ваш синтаксис для определения класса неверен, он должен выглядеть примерно так...

Я предполагаю, что класс будет называться Clean, а класс Clean является производным от класса Register?

class Clean(Register):
    def __init__(self):
        super().__init__().clean()
        password = self.cleaned_data.get('password')
        password2 = self.cleaned_data.get('password2')
        username = self.cleaned_data.get('username')
        email = self.cleaned_data.get('email')

    
        if password.islower():
            self.errors[''] = self.error_class(["Password must contain an uppercase"])
        
        elif password.isnumeric():
            self.errors[''] = self.error_class(["Password must contain an alphabet"])

        elif password.isalpha():
            self.errors[''] = self.error_class(["Password must contain a number"])

        elif len(password) < 8:
            self.errors[''] = self.error_class(["Password is too short"])

        elif password != password2:
            self.errors[''] = self.error_class(["The two password fields must match"])

        elif len(username) !=7  and len(username) != 9:
            self.errors[''] = self.error_class(["You have entered an invalid username"])

        else:
            pass
        
        try:
            if len(username) == 9:
                username = int(username)
        except ValueError:
            self.errors[''] = self.error_class(["You have entered an invalid username"])

        if len(username) == 7:
            if username.isalnum() is False:
                self.errors[''] = self.error_class(["Youuuu have entered an invalid username"])
            else:
                pass
        else:
            self.errors[''] = self.error_class(["You have entered an invalid username"])

        for instance in User.objects.all():
            if instance.username == username:
                self.errors[''] = self.error_class(["User already exist"])
            elif instance.email == email:
                self.errors[''] = self.error_class(["E-mail already in use"])
            else:
                pass

        return self.cleaned_data

Сначала выясните, что именно вы пытаетесь инстанцировать. И тогда мы сможем попытаться помочь.

Если вы просто хотите посмотреть, как выглядит логика для заданного вами вопроса. Она должна выглядеть следующим образом. Сначала вам нужно создать новую переменную в классе под названием "role", чтобы вы могли хранить, является ли человек студентом или преподавателем. Затем вы можете сделать это внутри класса.

if self.role == 'teacher':
    if len(self.id) == 7 and self.id.isalnum():
        print('success')
    else:
        print('whatever error code you want here')

elif self.role == 'student':
    if len(self.id) == 9 and self.id.isnumeric():
        print('success')
    else:
        print('whatever error code you want here')

else:

    print('error no role given')

Это только отправная точка, потому что класс, который вы создали там, является беспорядочным. Но вы должны быть в состоянии использовать это для создания того, что вы хотите.

Вернуться на верх