[PYTHON] Wenn Sie mehrere Formulare mit is_valid prüfen, versuchen Sie zunächst, sie Variablen zuzuweisen.

Überblick

Wenn Sie beispielsweise überprüfen möchten, ob mehrere Formulare in Django ordnungsgemäß eingegeben wurden, schreiben Sie sie einfach in das folgende Formular.


foo_form = HogeForm(request.POST, prefix="FooForm")
bar_form = FooForm(request.POST, prefix="BarForm")

if foo_form.is_valid() and bar_form.is_valid():
    #Angemessene Verarbeitung
    pass
else:
    pass

Trotzdem ist es möglich, den Fehler abzurufen, wenn eine der beiden Formen vorerst Moos ist. Das Problem ist jedoch, wenn beide Formen Moos sind. Nehmen Sie zu diesem Zeitpunkt nicht an, dass is_valid () von bar_form ausgeführt wird.

Warum?

Einfach ausgedrückt wird im Fall von Python im Fall der durch und verbundenen Beurteilungsformel die Bewertung nicht nach dem ersten False ausgeführt. Schreiben wir einen einfachen Code.

# -*- coding: utf-8 -*-


def return_True():
    print "Call: return_True"
    return True


def return_False():
    print "Call: return_False"
    return False


if return_True() and return_True() and return_False() and return_True():
    print "All True ?"
else:
    print "Not all True."

In diesem Fall wurde "Call: return_True" zweimal und "Call: return_False" nur einmal angezeigt. Die Ausführung der letzten Funktion wurde übersprungen. Dies liegt daran, dass * und sobald False erscheint, das Ganze False wird *. Um also Ressourcen wegzulassen, wird es wie "Dann ist das falsch" sein, ohne andere Dinge zu überprüfen. (Sobald True für oder erscheint, wird das nachfolgende Urteil übersprungen.)

was wirst du tun?

Am einfachsten ist es, eine Variable vorzubereiten. Zum Beispiel?

# -*- coding: utf-8 -*-


def return_True():
    print "Call: return_True"
    return True


def return_False():
    print "Call: return_False"
    return False

one_return_True = return_True()
two_return_True = return_True()
three_return_False = return_False()
forth_return_True = return_True()

if (one_return_True and
        two_return_True and
        three_return_False and
        forth_return_True):
    print "All True ?"
else:
    print "Not all True."

Auf diese Weise wird "return_True" auch dreimal angezeigt.

Zusammenfassung

Erstens, wenn das Verhalten mit anderen Methoden unter der Voraussetzung verflochten ist, dass eine Methode aufgerufen wird, oder wenn eine Methode verwendet wird, die Boolean nach der Verarbeitung mit der Methode mit if usw. zurückgibt, wie oben beschrieben, Die Methode, von der Sie denken, dass sie ausgeführt werden sollte, wird nicht ausgeführt.

Recommended Posts

Wenn Sie mehrere Formulare mit is_valid prüfen, versuchen Sie zunächst, sie Variablen zuzuweisen.
Erster Versuch von YDK mit Cisco IOS-XE
Wenn ich versuche, mit Heroku zu pushen, funktioniert es nicht