【问题标题】:Django form.is_valid() is False, but not hitting the else statement?Django form.is_valid() 是 False,但没有命中 else 语句?
【发布时间】:2021-08-15 23:48:48
【问题描述】:

我正在做一些应该很简单的事情,但遇到了一个非常奇怪的形式问题。

@csrf_protect
def employee_create(request, company_id):

    template_name = 'business/employee-create.html'
    data = dict()
    company = Company.objects.get(id=company_id)


    if request.method == 'POST':
        employee_form = EmployeeForm(request.POST)
        if employee_form.is_valid():
            logger.debug('Valid')
            emp = employee_form.save(commit=False)
            emp.company = venue
            emp.user = request.user
            emp.save()
            return redirect('comp_detail', company_id=company_id)
        else:
            logger.debug('Error')

    else:
        employee_form = EmployeeForm()
        data['html_form'] = render_to_string(
            template_name,
            {'form': employee_form, 'company_id': company.id},
            request=request,
        )
    return JsonResponse(data)

GET 请求只是一个弹出引导表单。但我的奇怪情况发生在POST 请求中。我正在发送一个完全为空的无效表单(在表单模式中,我会弹出 djangos 内置表单错误),但 else 语句永远不会被命中,它应该在我的 django 记录器中打印 Error

表格无效,但也不无效?这里一定有我遗漏的东西吗??

提前感谢任何人一眼!

【问题讨论】:

  • logger.debug 不会总是记录该项目。这取决于记录器的日志记录级别。
  • 啊,其实我不知道!
  • 也许您可以使用logger.error,这很可能是记录器将记录的日志级别。

标签: django django-views django-forms django-validation


【解决方案1】:

记录器通常设置为某个日志级别。这意味着,根据级别,某些日志记录可能不会被记录。 log levels [Python-doc] 按升序排列:NOTSETDEBUGINFOWARNINGERRORCRITICAL

根记录器通常以WARNING 作为阈值创建,因此INFODEBUGNOTSET不会被记录。

您可以更改阈值,也可以记录更高级别的消息:

if employee_form.is_valid():
    logger.error('Valid')
    # …
else:
    logger.error('Error')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 2014-09-06
    • 1970-01-01
    • 2020-04-06
    • 2014-01-10
    • 2020-05-09
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多