django - 表单未显示 ValidationError

标签 django python-3.x

它没有显示任何验证错误,而是重新加载空表单,直到所有表单字段行为验证。 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/

相关文章:

django - 无法在 django 的数据库中存储散列密码

django - 如何在VMWare中看到Django开发服务器?

python - 使用 python 从纯文本中提取包含空值的字符串

python - Tensorflow 无法处理惯用的简单代码

python - `ip = ipaddress.ip_address(args.ip)` 的 TCP 端口测试不准确

python - 如何将嵌套字典变成矩阵列表?

python - Django 过滤器是否会增加每个用户的内存消耗 : Python

python - 有没有办法让 django 中的每个 View 都执行一些东西?

python - 在 Django Rest Framework 中获取特定对象

python - 解决 python/django 应用程序中的循环依赖