Memeriksa Dua Bidang
Termasuk bagian Formulir dalam perjalanan Django di Coddy. Pelajaran 11 dari 20.
Pameran Buku Musim Dingin berlangsung selama tiga hari, dan tanggal akhir tidak boleh sebelum tanggal mulainya. Sebuah method clean_<field> memeriksa satu field, jadi aturan yang melibatkan beberapa field ditulis di clean(), yang dijalankan setelah pemeriksaan masing-masing field. Contoh formulir pemesanan yang mengharuskan grup dengan jumlah lebih dari 6 orang mencantumkan nomor telepon:
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_dataField yang gagal diperiksa tidak ada di cleaned_data, dan tanggal opsional yang kosong bernilai None, jadi baca dengan .get() dan bandingkan hanya jika kedua nilai tersedia.
self.add_error() menampilkan pesan di bawah satu field. Menaikkan forms.ValidationError di clean() membuat error untuk seluruh formulir, yang tidak ditampilkan oleh field mana pun: {{ form.non_field_errors }} yang menampilkannya.
Tantangan
Sedang- Tambahkan
end_datekeEventFormsetelahdate: tanggal yang boleh kosong. - Tolak tanggal akhir yang lebih awal daripada tanggal mulai dengan
The event cannot end before it starts., sebagai error untuk seluruh formulir. - Simpan
end_datedinew_event. - Tampilkan error seluruh formulir di atas kolom.
Tekan Jalankan dan coba tanggal akhir yang lebih awal daripada tanggal mulai.
Coba sendiri
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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Formulir
2Formulir Django
Sebuah Formulir DjangoMenggambar FormulirLatihan sendiri: Playground Django