** is_valid ** a été exécuté par la méthode ** post ** de la classe ** View ** écrite en ** views.py **. Le résultat de ** is_valid ** est ** False ** quel que soit le type d'entrée effectué sur le navigateur WEB.
La méthode de validation n'est pas implémentée dans forms.py.
Ce qui suit est un extrait du code source. Il existe une classe ** Meta ** dans la classe ** Form **, mais il s'agit d'une reconnaissance qui n'a rien à voir avec cet événement.
views.py
class View(View):
def post(self, request, *args, **kwargs):
form = Form()
is_valid = form.is_valid()
print(is_valid)
...
forms.py
class Form(forms.ModelForm):
class Meta:
model = ExperimentResult
fields = ("title", "comment",)
widgets = {
'title' : forms.TextInput(attrs={'class':'text_area'}),
'comment' : forms.TextInput(attrs={'class':'text_area'})
}
L'environnement d'exécution est ** django 2.2.12 **, python3.7, Windows 10.
Lors de l'instanciation de la classe Form, il est supposé qu'il y a une "demande" dans le premier argument de la méthode init.
Lors de l'écriture de form = FormClass (), "request" n'est pas passé à la méthode init. Par conséquent, lorsque la méthode "is_valid" est exécutée, une erreur de validation se produit car "request" n'est pas passée et False est toujours renvoyé.
Insérez data = request.POST comme argument lors de l'instanciation de la classe Form.
views.py
class View(View):
def post(self, request, *args, **kwargs):
form = Form(data=request.POST)
is_valid = form.is_valid()
print(is_valid)
...
Après avoir pris les mesures ci-dessus, j'ai confirmé que True reviendrait.
https://stackoverflow.com/questions/20801452/django-form-is-valid-always-false
Recommended Posts