Sprawdzanie dwóch pól
Część sekcji Formularze ścieżki Django w Coddy. Lekcja 11 z 20.
Zimowy Targ Książki trwa trzy dni, a koniec nie może przypadać przed jego rozpoczęciem. Metoda clean_<field> sprawdza jedno pole, więc reguła dotycząca wielu pól powinna znaleźć się w clean(), która uruchamia się po sprawdzeniu każdego pola. Formularz rezerwacji, w którym grupa licząca więcej niż 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:
raise forms.ValidationError("Groups over 6 need a phone number.")
return cleaned_dataPola, które nie przeszło sprawdzania, brakuje w cleaned_data, a pusta opcjonalna data ma wartość None, dlatego odczytuj dane za pomocą .get() i porównuj wartości tylko wtedy, gdy obie są dostępne.
Błąd zgłoszony w clean() dotyczy całego formularza, więc pętla pól go nie wyświetla. Wyświetla go {{ form.non_field_errors }}.
Wyzwanie
ŚredniWydarzenia otrzymują datę zakończenia.
- W
events/forms.pydodaj opcjonalne pole datyend_datedoEventForm. Napiszclean(): gdy podano obie daty i data zakończenia jest wcześniejsza, zgłośThe event cannot end before it starts.. Odczytaj daty za pomocą.get(). - W
new_eventzapisuj równieżend_date. - W
new_event.htmlumieśćform.non_field_errorsnad pętlą.
Ustaw datę zakończenia przed datą rozpoczęcia: zobaczysz ten komunikat.
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