Ошибка Django: Убедитесь, что это значение содержит не более 10 символов (оно содержит 321)
У меня есть файл страницы, в котором я обновляю данные пользователя. (Пользователь-студент) и я создаю поле для студента:
ID = models.CharField(max_length=10, null=True)
и я также делаю clean_ID в StudentForm, но когда я нажимаю правильное количество символов я получаю эту ошибку:
Убедитесь, что это значение имеет не более 10 символов (оно имеет 321).
Вы можете увидеть это на фотографии внизу. я не понимаю, как решить эту проблему
ПРОСМАТРИВАЕТ ФАЙЛ
class DetailsStudentView(View):
def get(self,request, student_id):
student = Student.objects.get(pk=student_id)
userStudent = User.objects.get(pk=student_id)
form_student = StudentForm(request.POST or None, instance=student)
form_user = StudentUserUpdate(None,instance=userStudent)
return render(request, "details.html",{'form_student':form_student, 'form_user':form_user})
def post(self,request,student_id):
form_student = StudentForm(request.POST, request.FILES)
if form_student.is_valid():
user = User.objects.get(pk=student_id)
email = form_student.cleaned_data['email']
user.email = email
user.save()
student = Student.objects.get(pk=student_id)
student.first_name = form_student.cleaned_data['first_name']
student.last_name = form_student.cleaned_data['last_name']
student.Phone = form_student.cleaned_data['Phone']
img = request.POST.get('imag_profile')
if img != None:
student.imag_profile = img
student.ID = form_student.cleaned_data['ID']
student.save()
return redirect('HomePage:home')
userStudent = User.objects.get(pk=student_id)
form_user = StudentUserUpdate(None,instance=userStudent)
return render(request,'details.html',{'form_student':form_student, 'form_user':form_user})
Форма FILE
class StudentForm(forms.ModelForm):
email = forms.EmailField(widget = forms.TextInput(attrs={ 'type':"text" ,'class': "bg-light form-control" }))
class Meta():
model = Student
fields = ('first_name','last_name','Phone','imag_profile','ID')
widgets = {
'first_name': forms.TextInput(attrs={ 'type':"text" ,'class':"bg-light form-control", }),
'last_name': forms.TextInput(attrs={ 'type':"text" ,'class':"bg-light form-control", }),
'Phone': forms.TextInput(attrs={ 'type':"text" ,'class':"bg-light form-control", }),
'ID': forms.TextInput(attrs={ 'type':"text" ,'class':"bg-light form-control", }),
}
def clean_ID(self):
ID = self.cleaned_data.get('ID')
if not ID.isdecimal():
raise forms.ValidationError("ID must to contain only digits.")
elif len(ID) != 9:
raise forms.ValidationError("ID must to contain 9 digits.")
return self.cleaned_data
HTML ФАЙЛ
я также удаляю базу данных и делаю makemigrations и мигрировать
но у меня возникла проблема.
По документации
Всегда возвращает значение для использования в качестве новых очищенных данных, даже если этот метод не изменил его. Возвращаемое значение этого метода заменяет существующее значение в clean_data, поэтому это должно быть значение поля из clean_data (даже если этот метод не изменил его) или новое очищенное значение.
Так что для вашего случая вы, вероятно, захотите изменить
clean_id
на следующее, чтобы вернуть значение, а не всеcleaned_data
:def clean_ID(self): ID = self.cleaned_data.get('ID') if not ID.isdecimal(): raise forms.ValidationError("ID must to contain only digits.") elif len(ID) != 9: raise forms.ValidationError("ID must to contain 9 digits.") # return self.cleaned_data # <--- DON'T DO THIS return ID