Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

ModelForm.is_valid appelle-t-il Model.full_clean() ?

+1 vote

Dans la doc, il est écrit que la méthode Model.full_clean est appelée après ModelForm.clean. À cette page, il est écrit que ModelForm.is_valid fait appel aux trois méthodes de validations, seulement sur les champs spécifiés. En-dessous, il est précisé que Model.full_clean fait appel successivement à ces trois méthodes, je suppose alors sur tous les champs.

Donc c'est normal que, s'il manque des champs spécifiés dans le ModelForm, un is_valid peut valoir True, même si la méthode Model.full_clean renvoie une exception, comme montré ci-dessous.

models.py

class Question(models.Model):
    short = models.CharField(max_length=10)
    intitule = models.TextField()

forms.py

class CreateQuestionForm(forms.ModelForm):
    class Meta:
        model = Question
        fields = ('intitule',)

Test via shell

>>> question_form = CreateQuestionForm(data={'intitule': "Première question"})
>>> print(question_form.is_valid())
True
>>> question = question_form.save()
>>> question.full_clean()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/tmp/django_example/.env/lib/python3.6/site-packages/django/db/models/base.py", line 1249, in full_clean
    raise ValidationError(errors)
django.core.exceptions.ValidationError: {'short': ['This field cannot be blank.']}

C'est bien un comportement souhaité?

demandé 9-Jul par sekun (134 points)

La réponse plus bas dans la doc:

You should only need to call a model’s full_clean() method if you plan to handle validation errors yourself, or if you have excluded fields from the ModelForm that require validation.

C'est bien un comportement souhaité donc (?)

Votre réponse

Preview

Votre nom à afficher ( en option ):
Vie privée: . Votre adresse de messagerie ne sera utilisée que pour l'envoi de ces notifications .
Vérification anti -spam:
Pour éviter cette vérification à l'avenir, Connectez vous ou inscrivez vous.
...