Sprawdzanie dwóch pól
Część sekcji Formularze ścieżki Django w Coddy. Lekcja 11 z 20.
Zimowe Targi Książki trwają trzy dni, a data końcowa nie może przypadać przed datą początkową. Metoda clean_<field> sprawdza jedno pole, więc reguła dotycząca kilku pól należy do clean(), która jest uruchamiana po sprawdzeniu każdego pola. Formularz rezerwacji, w którym grupa licząca ponad 6 osób musi podać numer telefonu:
def clean(self):
cleaned_data = super().clean()
guests = cleaned_data.get("guests")
phone = cleaned_data.get("phone")
if guests and guests > 6 and not phone:
self.add_error("phone", "Groups over 6 need a phone number.")
return cleaned_dataNieudane pole nie znajduje się w cleaned_data, a pusta opcjonalna data ma wartość None, dlatego odczytuj dane za pomocą .get() i porównuj wartości tylko wtedy, gdy dostępne są obie.
self.add_error() umieszcza komunikat pod jednym polem. Zgłoszenie wyjątku forms.ValidationError w clean() powoduje błąd całego formularza, którego nie wyświetla żadne pole — robi to {{ form.non_field_errors }}.
Wyzwanie
Średni- Dodaj
end_datedoEventFormpodate: datę, która może być pusta. - Odrzuć datę końcową wcześniejszą niż data początkowa za pomocą
The event cannot end before it starts.— błędu dotyczącego całego formularza. - Zapisz
end_datewnew_event. - Pokaż błędy całego formularza nad polami.
Naciśnij Run i spróbuj ustawić datę końcową wcześniejszą niż początkowa.
Spróbuj swoich sił
import datetime
from django import forms
class EventForm(forms.Form):
title = forms.CharField(max_length=100)
date = forms.DateField()
place = forms.CharField(max_length=100)
description = forms.CharField(widget=forms.Textarea, required=False)
capacity = forms.IntegerField(min_value=1)
def clean_date(self):
date = self.cleaned_data["date"]
if date < datetime.date.today():
raise forms.ValidationError("The date cannot be in the past.")
return date
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Formularze
2Formularze Django
Formularz DjangoWyświetlanie formularzaPoćwicz samodzielnie: Edytor online Django