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 lebih awal dari tanggal mulainya. Metode clean_<field> memeriksa satu field, jadi aturan yang mencakup beberapa field ditulis di clean(), yang berjalan setelah pemeriksaan masing-masing field selesai. Contoh formulir pemesanan yang mewajibkan nomor telepon untuk grup beranggotakan lebih dari 6 orang:
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_dataField yang gagal diperiksa tidak ada di cleaned_data, dan tanggal opsional yang kosong bernilai None, jadi baca nilainya dengan .get() dan lakukan perbandingan hanya jika kedua nilainya tersedia.
Error yang muncul di clean() berlaku untuk seluruh formulir, jadi perulangan field tidak menampilkannya. {{ form.non_field_errors }} yang menampilkannya.
Tantangan
SedangAcara mendapatkan tanggal akhir.
- Di
events/forms.py, tambahkan kolom tanggalend_dateopsional keEventForm. Tulisclean(): jika kedua tanggal tersedia dan tanggal akhir lebih awal, tampilkanThe event cannot end before it starts.Baca tanggal dengan.get(). - Di
new_event, simpan jugaend_date. - Di
new_event.html, tampilkanform.non_field_errorsdi atas perulangan.
Atur tanggal akhir sebelum tanggal mulai: kamu akan melihat pesan itu.
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