python - 验证 end_time 大于 start_time django 形式

标签 python django

我在模型中有 start_timeend_time 数据字段,我想在 start_time 晚于 end_time< 时分配错误

表单.py

class RentForm(forms.ModelForm):
    class Meta:
        model = Rent
        fields = ['start_time', 'end_time']
    def clean(self):
        cleaned_data = super().clean()
        start_date = cleaned_data.get("start_time")
        end_date = cleaned_data.get("end_time")
        if start_time > end_time:
            raise forms.ValidationError("Error")

View .py

def rent_car(request):
    if request.method == 'POST':
        form = RentForm(request.POST or None)
        if form.is_valid():
            form.save()
            return redirect('/')
    else:
        form = RentForm(request.POST)
    return render(request, 'rent.html', {'form': form)

不幸的是,我得到一个错误

unsupported operand type(s) for -: 'NoneType' and 'NoneType'

请帮我解决这个问题。

最佳答案

您以错误的方式使用表单。你不应该使用 RentForm(request.POST) 如果你创建一个表单来呈现(暂时),因为你已经将值存储在表单中。此外,使用 request.POST 也不是一个好主意,因为如果没有 POST 参数,POST 请求有时可能完全有效。因此,您应该将 View 重写为:

def rent_car(request):
    if request.method == 'POST':
        form = <b>RentForm(request.POST)</b>
        if form.is_valid():
            form.save()
            return redirect('/')
    else:
        form = <b>RentForm()</b>
    return render(request, 'rent.html', {'form': form)

您可能希望在您的RentForm 中设置start_timeend_time,并且您必须返回cleaned_data 如果表单不是无效的:

class RentForm(forms.ModelForm):
    start_time = forms.DateTimeField(<b>required=True</b>)
    end_time = forms.DateTimeField(<b>required=True</b>)

    class Meta:
        model = Rent
        fields = ['start_time', 'end_time']

    def clean(self):
        cleaned_data = super().clean()
        start_date = cleaned_data.get('start_time')
        end_date = cleaned_data.get('end_time')
        if start_time > end_time:
            raise forms.ValidationError("Error")
        return <b>cleaned_data</b>

关于python - 验证 end_time 大于 start_time django 形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57844518/

相关文章:

django - django信号,如何使用“实例”

jquery - 通过 JQuery .val() 将多个数据字段从 <select multiple> 传递到 Django formfield

django - 使用 django-social-auth 和 Facebook 身份验证失败

python - 将名字的第一个字母取消大写

Python:用字符串中的标题名称替换网址

python - 创建类后在方法上设置属性会引发 "' instancemethod' object has no attribute“但属性显然存在

python - Django 如何将初始对象设置为 ModelList?

python - Numpy 零二维数组 : substituting elements at specific indices

python - 如何根据连续天数对 DataFrame 进行索引

python - 如何使用多重继承来编写 Django 表单?