[PYTHON] [Jjango] Zeigt die Fehlermeldung an, die durch Auslösen von ValidationError angegeben wurde

Im Gegensatz zu Pythons normalem Versuch, mit Ausnahme der Ausnahmebehandlung, bleibe ich bei der Erkennung von Ausnahmen und der Anzeige des Inhalts, daher werde ich Aufzeichnungen darüber führen.

Dieses Mal möchte ich einen Artikel über die Anzeige einer Fehlermeldung schreiben, wenn beim Überprüfen von Variationen eines Formulars oder Modells eine eindeutige Validierungsprüfung abgefangen wird.

Kurze Erklärung der Situation

Ich habe eine einfache Unschärfefilterfunktion mit OpenCV entwickelt und wollte den Benutzer bitten, die Filtergröße einzugeben und die Effektstärke (Filtergröße) aus diesem Wert zu bestimmen.

Also habe ich ein Formular mit der Form-Klasse erstellt, aber da ich den Gauß-Filter verwendet habe, wird eine Fehlermeldung angezeigt, wenn der eingegebene Wert gerade ist.

Von hier aus habe ich darüber nachgedacht, eine eindeutige Variationsprüfung für die Form-Klasse zu erstellen, die "einen Fehler behandelt, wenn der Eingabewert gerade ist".

Quellcode

Wenn Sie einen Fehler machen, tut es mir leid. Sie müssen sich nicht zu viele Sorgen um models.py machen.

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): #Funktion zum Überprüfen, ob es ungerade ist
    if value % 2 == 0:
        raise ValidationError('Bitte geben Sie eine gerade Zahl ein')
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], #Zusätzlich ist eingeschaltet_Führen Sie eine Validierungsprüfung mit einer ungeraden Zahl durch
    )

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}) #Stellen Sie das Formular mit der Fehlermeldung ein und zeigen Sie es erneut an

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 %}

Es scheint, dass die Fehlermeldung, die das Argument für das Auslösen von ValidationError ist, in form.errors gespeichert ist.

Wenn daher ein Variationsfehler auftritt, kann die Fehlermeldung ohne Bildschirmübergang angezeigt werden, indem das Formular mit der Fehlermeldung in form.errors mit render erneut angezeigt wird.

Recommended Posts

[Jjango] Zeigt die Fehlermeldung an, die durch Auslösen von ValidationError angegeben wurde
Fehlermeldung anzeigen, wenn die Anmeldung in Django fehlschlägt
[Django] Zeigt eine Nachricht am Umleitungsziel an
Django ~ Lass es uns im Browser anzeigen ~
[Django] Fehler, wenn SlugField in .filter () angegeben ist
Legen Sie die von django hochgeladene Datei in MinIO ab
DJango Memo: Von Anfang an (Fehlerbildschirmeinstellung)
Zeigen Sie die Django-Schichttabelle an! Unterstützt das 20-Tage-Schließen