Модель не получает объекты в функции 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