[Jjango] Afficher le message d'erreur spécifié par lever ValidationError

Contrairement à la gestion normale des essais et des exceptions de python, je suis coincé avec la détection des exceptions et l'affichage de son contenu, donc je vais en garder une trace.

Cette fois, j'aimerais écrire un article sur l'affichage d'un message d'erreur lorsqu'un contrôle de validation unique est intercepté lors de la vérification des variations sur un formulaire ou un modèle.

Brève explication de la situation

Je développais une fonction de filtre Flou simple en utilisant OpenCV, et je voulais demander à l'utilisateur de saisir la taille du filtre et de déterminer la force de l'effet (taille du filtre) à partir de cette valeur.

Donc, j'ai créé un formulaire en utilisant la classe Form, mais comme j'ai utilisé le filtre gaussien, j'obtiens une erreur si la valeur entrée est paire.

De là, j'ai pensé à créer un contrôle de variation unique pour la classe Form qui "gère une erreur si la valeur d'entrée est paire".

Code source

Si vous faites une erreur, je suis désolé. Vous n'avez pas à vous soucier trop de models.py.

app/urls.py


app_name = 'app'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
]

models.py


class Image(models.Model):
    img_src = models.ImageField(upload_to=get_upload_to)   

form.py


def is_oddnumber(value): #Fonction pour vérifier si c'est bizarre
    if value % 2 == 0:
        raise ValidationError('Veuillez saisir un nombre pair')
class Form(forms.ModelForm):
    class Meta:
        model = Image
        fields = ('img_src')

    filter_size = forms.IntegerField(
        required=True,
        max_value=100,
        min_value=1,
        validators=[is_oddnumber], #Supplémentaire est activé_Effectuer un contrôle de validation avec un nombre impair
    )

views.py


class IndexView(generic.TemplateView)
     
    template_name = index.html
    
    def get(self, request, *args, **kwargs):
        form = Form()
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = Form(request.POST, request.FILES)
        if form.is_valid():
             return redirect(○)
        return render(request, self.template_name, {'form': form}) #Définissez le formulaire contenant le message d'erreur et réaffichez-le

index.html


<form action="{% url 'app:index' %}" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit">
</form>

{% if form.errors %}
<ul>
    {% for error in form.non_field_errors %}
    <li>{{ error }}</li>
    {% endfor %}
</ul>
{% endif %}

Il semble que le message d'erreur qui est l'argument de rise ValidationError est stocké dans form.errors.

Par conséquent, si une erreur de variation se produit, le message d'erreur peut être affiché sans transition d'écran en réaffichant le formulaire contenant le message d'erreur dans form.errors avec rendu.

Recommended Posts

[Jjango] Afficher le message d'erreur spécifié par lever ValidationError
Afficher un message d'erreur lorsque la connexion échoue dans Django
[Django] Afficher un message à la destination de la redirection
Django ~ Affichons-le sur le navigateur ~
[Django] Erreur lorsque SlugField est spécifié dans .filter ()
Mettez le fichier téléchargé par django dans MinIO
DJango Memo: depuis le début (réglage de l'écran d'erreur)
Affichez la table des équipes Django! Prend en charge la fermeture de 20 jours