我在模型中有 start_time
和 end_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_time
和end_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/