Menu
CoddyTech

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_data

Field 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.

challenge icon

Tantangan

Sedang

Acara mendapatkan tanggal akhir.

  1. Di events/forms.py, tambahkan kolom tanggal end_date opsional ke EventForm. Tulis clean(): jika kedua tanggal tersedia dan tanggal akhir lebih awal, tampilkan The event cannot end before it starts. Baca tanggal dengan .get().
  2. Di new_event, simpan juga end_date.
  3. Di new_event.html, tampilkan form.non_field_errors di 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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Formulir

Latihan sendiri: Playground Django