Ошибка 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 ФАЙЛ

enter image description here

я также удаляю базу данных и делаю 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
Вернуться на верх