/ / Jak mogę sprawdzić w moim widoku django, które z pól 2 formularzy zostało wypełnione? - python, django, django-forms, widoki django

Jak mogę stwierdzić w moim widoku django, które z pól 2 formularzy zostało wypełnione? - python, django, django-forms, widoki django

Chcę wyświetlić oba form1 i form2 na stronie internetowej. Jeśli form2 jest napełniony (if success == True), Chcę, aby mój widok nie był wykonywany if form1.is_valid:

(co daje błędy). Jak uzyskać dostęp do wartości success w views.py?

forms.py

class Form1(forms.Form):
....
....
def clean(self):
....
....

class Form2(forms.Form):
....
....
def clean(self):
....
success = False

views.py

def my_view(request, element_pk):
....
....
if request.method == POST:
form2 = Form2(request.POST)
form1 = Form1(request.POST)

if form2.is_valid():
....
if form1.is_valid():
....

else:
form2 = Form2()
form1 = Form1()

Odpowiedzi:

0 dla odpowiedzi № 1

Dla Twojego <input /> lub <button></button> tag, użyj a name parametr dla każdej postaci (tj.):

<button type="submit" name="form_1">Go!</button>

Następnie według własnego uznania wykonaj następujące czynności:

if form2.is_valid() and "form_2" in request.POST:
. . .
if form1.is_valid() and "form_1" in request.POST:
. . .

0 dla odpowiedzi nr 2

Oprawa success = False jak zrobiłeś w metodzie clean tylko ustawia go lokalnie. Zapisz wartość na klasie (self.success = False) lub w clean_data (self.cleaned_data["success"] = False, zakładając, że twoja forma nie ma pola o nazwie success).

Następnie możesz uzyskać dostęp do wartości za pomocą:

if form2.is_valid():
success = form2.success

lub

if form2.is_valid():
success = form2.cleaned_data.get("success")

Aby uzyskać więcej informacji na temat clean funkcja, patrz docs.