它没有显示任何验证错误,而是重新加载空表单,直到所有表单字段行为验证。 View .py
def Leave_management(request):
if request.user.is_superuser:
form = LeaveForm(request.POST or None)
if form.is_valid():
form.save()
return redirect('leave_list')
else:
form = LeaveForm()
return render(request, 'leave_management.html', {'form': form})
if not request.user.is_superuser and not request.user.is_anonymous:
form = LeaveForm(request.POST or None)
form.fields['status'].disabled = True
if form.is_valid():
form.save()
return redirect('leave_list')
else:
form = LeaveForm()
return render(request, 'leave_management.html', {'form': form})
模板
<hr><h1>Leave Application</h1><hr>
<form method="post">
{% csrf_token %}
{{form|crispy}}
<input type="submit" value="submit" >
</form>
最佳答案
罪魁祸首是您创建了一个新LeaveForm
:
def Leave_management(request):
if request.user.is_superuser:
form = LeaveForm(request.POST<b> or None</b>)
if form.is_valid():
form.save()
return redirect('leave_list')
<b>else:
form = LeaveForm()</b>
return render(request, 'leave_management.html', {'form': form})
if not request.user.is_superuser and not request.user.is_anonymous:
form = LeaveForm(request.POST<b> or None</b>)
form.fields['status'].disabled = True
if form.is_valid():
form.save()
return redirect('leave_list')
<b>else:
form = LeaveForm()</b>
return render(request, 'leave_management.html', {'form': form})
因此,您创建了一个新表单,它当然不知道您通过它发送的值任何。
但是,request.POST 或 None
模式也不是一个好主意:它会导致这样一个事实:如果您有一个本身不需要数据的表单,那么 POST
请求永远无法正确完成,因为表单会看到 None
,并假定您是第一次构建表单。
这个想法是将 request.POST
提供给表单,以防这是一个发布请求,例如:
def leave_management(request):
<b>if request.method == 'POST':
form = LeaveForm(request.POST)
else:
form = LeaveForm()</b>
if not request.user.is_superuser and not request.user.is_anonymous:
form.fields['status'].disabled = True
if form.is_valid():
form.save()
return redirect('leave_list')
else:
return render(request, 'leave_management.html', {'form': form})
此外,我们在这里复制代码路径。用户是否是 super 用户确实有一些影响,但是没有理由将过程的其余部分全部编写在两个单独的代码路径中。我们可以创建一个 if
语句来完成这项工作,然后让代码路径再次加入。
此外,我们因此总是构造一个形式(在第一个if
语句中)。此外,view
函数的名称(与所有函数一样)通常只使用小写字母。
关于django - 表单未显示 ValidationError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949598/