Django管理界面中字段错误未显示的问题。

7

我有一个Django管理表单,其中存在已知的错误源,这些错误会阻止表单被保存。我已经检查了模型中的所有字段,并且所有必填字段都已填写。尽管如此,我仍然收到标准的错误消息:

Please correct the error below.

在表单顶部,但没有任何字段被突出显示为错误消息。
还可能有其他原因,我该如何调试?
2个回答

12

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

# 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)

除了可能的原因之外,我在包含自定义模板的内联时遇到了这个错误,该模板覆盖了字段以仅显示一些额外的只读信息。我通过将字段明确列为只读字段来修复它,这样视图逻辑就知道不要期望它们。 - nimasmi
谢谢你的帮助,Scott。我在forms.py中声明了两个必填字段password1password2,但是在django管理页面中,add_fieldsets = ((None, {'fields': ('email', 'password')}),,所以我需要将其更改为add_fieldsets = ((None, {'fields': ('email', 'password1', 'password2')}))。一开始无法显示“密码”字段的错误信息。 - Brian

0

我遇到了同样的问题。对我来说,这是一个带有auto_now_add属性的DateTimeField,在数据库中我强制设置了值,但是该值的格式对Django来说不正确,因为被标记为auto_now_add的字段在管理员界面中不显示,错误也没有显示出来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接