django - 表单未显示 ValidationError
问题描述
它没有显示任何验证错误,而是重新加载空表单,直到所有表单字段行为验证。视图.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 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})
因此,您创建了一个新表单,它当然对您通过它发送的值一无所知。
但此外,该request.POST or None
模式也不是一个好主意:它会导致这样一个事实,即如果您有一个本身不需要数据的表单,那么POST
请求将永远无法正确完成,因为那时表单看到 a None
,并假设您是第一次构建表单。
这个想法是request.POST
在这是一个发布请求的情况下将其提供给表单,例如:
def leave_management(request):
if request.method == 'POST':
form = LeaveForm(request.POST)
else:
form = LeaveForm()
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})
此外,我们在这里重复代码路径。用户是否是超级用户确实有一些影响,但是没有理由将程序的其余部分都写在两个单独的代码路径中。我们可以做一个if
声明来完成这项工作,然后让代码路径再次加入。
此外,我们因此总是构造一个形式(在第一个if
语句中)。此外,view
函数的名称(像所有函数一样)通常只使用小写字母。
推荐阅读
- anylogic - AnyLogic 选择输出问题
- questdb - 如何检查现有表是否具有指定的时间戳?
- matplotlib - 使用 hdf5 文件中的 astropy 在 skyplot 上绘制平均值和标准 dev 值
- sql - 查询结果时间限制的SSMS设置
- java - 如何在 Spring Security ACL 中添加权限
- ios - How much does iOS app size impact app launch latency?
- powershell - 从 Powershell 4.0 中的本地组中检索本地用户
- excel - 将单元格值与另一个工作表中的值匹配
- python - Bokeh - gridplot 的所有列都有固定的宽度
- mongodb - 我可以在 mongo Docker 中创建用户、数据库和集合吗?