7

我的模型中有一个 start_date 和 end_date 字段,我想在 end_date 大于 start_date 时为其分配一个错误,我一直在寻找文档,但没有找到关于此的示例。

4

3 回答 3

11

您需要在表单中使用自定义清理函数来进行检查:

def clean(self):
    cleaned_data = super().clean()
    start_date = cleaned_data.get("start_date")
    end_date = cleaned_data.get("end_date")
    if end_date < start_date:
        raise forms.ValidationError("End date should be greater than start date.")
于 2011-09-09T01:41:19.587 回答
4

这是 Django 2.2 的更新 -文档

from django import forms
from .models import Project

class ProjectAddForm(forms.ModelForm):
    class Meta:
        model = Project
        fields = [
            'name', 
            'overview',
            'start_date',
            'end_date',
            'status',
            'completed_on',
        ]

        labels = {
            "name": "Project Name",
            "overview": "Project Overview",
            "status": "Project Status",
        }

    # Logic for raising error if end_date < start_date
    def clean(self):
        cleaned_data = super().clean()
        start_date = cleaned_data.get("start_date")
        end_date = cleaned_data.get("end_date")
        if end_date < start_date:
            raise forms.ValidationError("End date should be greater than start date.")
于 2019-05-16T07:57:08.433 回答
3

这是文档中实际推荐的示例

简而言之,请记住返回clean_data,并正确引发表单错误。

from django import forms

class ContactForm(forms.Form):
    # Everything as before.
    ...

    def clean_recipients(self):
        data = self.cleaned_data['recipients']
        if "fred@example.com" not in data:
            raise forms.ValidationError("You have forgotten about Fred!")

    # Always return the cleaned data, whether you have changed it or
    # not.
    return data
于 2014-10-07T10:58:56.800 回答