Django Form : clean_data.get(field name) возвращает None в методе clean()
Я следую документации Django по Django form, но не могу понять, в чем проблема в моем коде. Я пишу следующий код в методе clean, чтобы проверить, начинается ли имя и email со строчной буквы s или нет, но Django возвращает None в методе clean_data.get(field name) и я получаю "Attribute error" : 'NoneType' object has no attribute 'startswith'. Пожалуйста, помогите мне с этим: Ссылка: https://docs.djangoproject.com/en/4.1/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other
from django import forms
from django.core.exceptions import ValidationError
class GirlsFeedback(forms.Form):
name = forms.CharField(label = 'Enter Your Name', label_suffix = " ", required=True, disabled=False, min_length = 5, max_length = 100, strip=True)
password = forms.CharField(label='Enter Your Password', label_suffix = " ", required=True, disabled=False,
min_length=8, max_length=10, help_text="Minimum 8 and Maximum 10 characters are allowed.", widget=forms.PasswordInput)
email = forms.EmailField(error_messages={'required': 'Email is mandatory'})
def clean(self):
cleaned_data = super().clean()
name = cleaned_data.get('name')
email = cleaned_data.get('email')
if name.startswith('s') and email.startswith('s') !=True:
raise ValidationError('Name and email both should start with a lowercase s')
Error:
AttributeError at /feedback3/
'NoneType' object has no attribute 'startswith'
Request Method: POST
Request URL: http://localhost:8000/feedback3/
Django Version: 4.1.2
Exception Type: AttributeError
Exception Value:
'NoneType' object has no attribute 'startswith'
Exception Location: C:\Users\singh\Desktop\Journey\Django Journey\Geeky
Shows\Eleven\Feedback3\forms.py, line 72, in clean
Raised during: Feedback3.views.feedback
Python Executable: C:\Users\singh\AppData\Local\Programs\Python\Python310\python.exe
Python Version: 3.10.7
Похоже, что форма не получает никаких данных, поэтому она возвращает NoneType
, хотя вы можете использовать значение по умолчанию для предотвращения ошибки, как:
def clean(self):
cleaned_data = super().clean()
name = cleaned_data.get('name', "Sujit Singh")
email = cleaned_data.get('email', "sujit123@gmail.com")
if name.startswith('s') and email.startswith('s') !=True:
raise ValidationError('Name and email both should start with a lowercase s')
В настоящее время он будет возвращать значения по умолчанию вместо NoneType
, поэтому он не будет выдавать никаких ошибок.
Представление должно быть таким:
def feedback(request):
if request.method == 'POST':
var = GirlsFeedback(request.POST)
if var.is_valid():
name = var.cleaned_data['name']
password = var.cleaned_data['password']
email = var.cleaned_data['email']
return HttpResponseRedirect('/feedback3/success')
else:
var = GirlsFeedback()
return render(request, 'Feedback3/feedback.html', {'data': var})