Мой код Django (формы и модели) работает просто отлично, но это определенно плохой выбор для больших объемов данных. Буду признателен за предложения

Этот код отлично работает при регистрации пользователей и добавлении их в базу данных. С дополнительным кодом в шаблоне, он также показывает пользователям, что выбранное ими имя пользователя/email уже существует. Однако я уверен, что качество этого кода очень плохое, поскольку он не будет хорошо работать с большими базами данных, так как я ищу всех пользователей и их имена/почту. Но опять же, я не знаю, как добавить лучшую валидацию.

Я решил добавить эти валидаторы (пароли исключены), потому что unique=True в моделях не влияют на формы. Я имею в виду, что до этих кодов, если я регистрировался с одним и тем же именем пользователя и электронной почтой снова и снова, если пароли совпадали, последний пароль, который я ввел, добавлялся в базу данных (номер пользователя оставался прежним), но форма считалась валидной (я думаю) и не показывала никаких ошибок пользователю. Это лучшее, что я придумал, но я уверен, что это плохой вариант. Я принимаю любые предложения, какую еще валидацию я могу добавить, чтобы решить указанную проблему. Я думал, что unique=True исправит ситуацию, но, видимо, этого недостаточно. Обратите внимание, что я тоже новичок, и если этот вопрос прозвучит как вопрос новичка, пожалуйста, извините меня. Спасибо

    class UserForm(forms.Form):
       username=forms.CharField(label='username', max_length=30)
       email=forms.EmailField(label='email')
       password=forms.CharField(label='password', max_length=100, widget=forms.PasswordInput)
       confirm_password=forms.CharField(label='confirm_password', max_length=100, widget=forms.PasswordInput)

   
    def clean(self):
        cleaned_data=super().clean()
        data1=cleaned_data.get('password')
        data2=cleaned_data.get('confirm_password')
        if data1!=data2:
            raise forms.ValidationError("Passwords do not match")

        data3=cleaned_data.get('username')
        userset=UserModel.objects.all()
        for person in userset:
            if person.username==data3:
                raise forms.ValidationError("User with such username already exists")

        data4=cleaned_data.get('email')
        userset=UserModel.objects.all()
        for person in userset:
            if person.email==data4:
                raise forms.ValidationError("User with such email already exists")


class UserModel(models.Model):
    username=models.CharField(max_length=30, unique=True, primary_key=True)
    email=models.EmailField(unique=True)
    password=models.CharField(max_length=100)```
Вернуться на верх