gpt4 book ai didi

python - 验证 end_time 大于 start_time django 形式

转载 作者:行者123 更新时间:2023-11-28 17:56:50 24 4
gpt4 key购买 nike

我在模型中有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com