Модель не получает объекты в функции clean_<имя поля>

У меня вопрос. У меня есть пользовательская модель пользователя и я создал форму для создания пользователя. Код модели пользователя и формы регистрации будет приведен выше. В чистых методах для каждого поля методы User не работают. Поэтому я хочу получить объекты модели User, но модель User возвращает пустой QuerySet. Но у меня в базе данных 2 пользователя. Я пытаюсь получить объекты пользователей в clean_email и clean_username, но оба метода get возвращают пустой QuerySet. Может ли кто-нибудь помочь мне?
Модель пользователя:

Форма регистрации:

class UserRegisterForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('email', 'username', 'first_name', 'last_name', 'password1', 'password2', 'date_of_birth')


    email                   = forms.EmailField(
        widget=forms.EmailInput(
            attrs={

            }
        )
    )
    username                = forms.CharField(
        widget=forms.TextInput(
            attrs={

            }
        )
    )
    password1               = forms.CharField(
        widget=forms.PasswordInput(
            attrs={
                
            }
        ),
    )
    password2               = forms.CharField(
        widget=forms.PasswordInput(
            attrs={

            }
        ),
    )
    date_of_birth           = forms.DateField(
        widget=forms.DateInput(
            attrs={

            }
        )
    )


    def clean_email(self):
        email = self.cleaned_data.get('email')
        print(User.objects.all())
        print(f"Email {email}")

        try:
            user = User.objects.get(email=email)
        except User.DoesNotExist:
            return email

        print(user)
        raise forms.ValidationError(f"Sorry, but {email} is taken already")


    def clean_first_name(self):
        first_name = self.cleaned_data.get('first_name')
        first_name = normalize_name(first_name)
        return first_name


    def clean_last_name(self):
        last_name = self.cleaned_data.get('last_name')
        last_name = normalize_name(last_name)
        return last_name


    def clean_password1(self):
        password1 = self.cleaned_data.get('password1')
        length = len(password1)
        if length < 9 or length > 20:
            raise forms.ValidationError("Password must be between 9-20 characters...")
        else:
            return password1


    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')

        if password2 != password1:
            raise forms.ValidationError("Passwords are not same...")
        else:
            return password2


    def clean_date_of_birth(self):
        date_of_birth = self.cleaned_data.get('date_of_birth')
        today = date.today()

        ageofuser = age(birthday=date_of_birth)

        if ageofuser < 18:
            raise forms.ValidationError("Users must be older than 18 years old")
        
        else:
            return date_of_birth


    def clean(self):
        super().clean()

+1 на самом деле моя проблема в модели User. То есть поверх метода clean_email() я пытаюсь получить все объекты модели User, но не могу. Я полагаю, что основная проблема заключается в следующем. - IlkinImanov

Я нашел причину проблемы. Эта проблема не связана с методами модели. Я узнал, что классы TestCase создают новую тестовую базу данных. Таким образом, мои существующие объекты не находятся в тестовой базе данных. Это нормально, что при вызове методов QuerySet и get() возвращается пустой объект all(). Для получения дополнительной информации: Django Test Case Can't run method

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