我有一个Django管理表单,其中存在已知的错误源,这些错误会阻止表单被保存。我已经检查了模型中的所有字段,并且所有必填字段都已填写。尽管如此,我仍然收到标准的错误消息:
Please correct the error below.
在表单顶部,但没有任何字段被突出显示为错误消息。
还可能有其他原因,我该如何调试?
我有一个Django管理表单,其中存在已知的错误源,这些错误会阻止表单被保存。我已经检查了模型中的所有字段,并且所有必填字段都已填写。尽管如此,我仍然收到标准的错误消息:
Please correct the error below.
以下是如何查看隐藏错误的方法。在您的表单类之上(如果尚不存在,请创建一个)添加这些导入:
# 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
然后在你的表单类中添加以下代码:
class MyAdminForm(forms.ModelForm):
def is_valid(self):
log.info(force_text(self.errors))
return super(MyAdminForm, self).is_valid()
当您再次提交后检查日志时,它将列出所有隐藏的错误。
当我遇到这个问题时,我发现错误的原因是我在表单中添加了一些“计算”的只读字段,例如:
get_num_items = forms.IntegerField()
因为这些字段的值是必需的,所以验证失败了。将字段定义更改为required=False解决了这个问题:
get_num_items = forms.IntegerField(required=False)
我遇到了同样的问题。对我来说,这是一个带有auto_now_add属性的DateTimeField,在数据库中我强制设置了值,但是该值的格式对Django来说不正确,因为被标记为auto_now_add的字段在管理员界面中不显示,错误也没有显示出来。
forms.py
中声明了两个必填字段password1
和password2
,但是在django管理页面中,add_fieldsets = ((None, {'fields': ('email', 'password')}),
,所以我需要将其更改为add_fieldsets = ((None, {'fields': ('email', 'password1', 'password2')}))
。一开始无法显示“密码”字段的错误信息。 - Brian