Django管理表单上未显示的字段中的错误

Sco*_*ott 2 python django django-forms django-admin

我有一个Django管理表单,它有一个已知的错误源,可以防止表单被保存.我检查了模型中的所有字段,并填写了所有必填字段.不过,我继续收到标准错误消息:

Please correct the error below.
Run Code Online (Sandbox Code Playgroud)

在表单的顶部,但没有突出显示错误消息的字段.

可能是另一个原因,我该如何调试?

Sco*_*ott 5

以下是如何查看隐藏错误的方法.在表单类之上(如果尚不存在则创建一个),添加以下导入:

# get a way to log the errors:
import logging
log = logging.getLogger(__name__)
# convert the errors to text
from django.utils.encoding import force_text
Run Code Online (Sandbox Code Playgroud)

然后添加到您的表单类这个def:

class MyAdminForm(forms.ModelForm):

    def is_valid(self):
        log.info(force_text(self.errors))
        return super(MyAdminForm, self).is_valid()
Run Code Online (Sandbox Code Playgroud)

再次提交后检查日志时,它将列出所有隐藏的错误.

当我遇到这个问题时,我发现错误的原因是我添加到表单中的一些"计算"只读字段,例如:

get_num_items = forms.IntegerField()
Run Code Online (Sandbox Code Playgroud)

验证失败,因为这些字段没有所需的值.将字段定义更改为include required = False修复了问题:

get_num_items = forms.IntegerField(required=False)
Run Code Online (Sandbox Code Playgroud)