【问题标题】:Checking is_valid() on a specific field检查特定字段的 is_valid()
【发布时间】:2018-10-02 06:21:20
【问题描述】:

我正在尝试检查表单上的“图像”字段以查看它是否有效。在我看来,我有以下代码:

if form.is_valid():
   #some stuff

else:
   errors = form.errors.as_data()
   for error in errors:
      if error == 'image':
         print('There was an error with the image!')

我有一个自定义验证器,如果用户尝试上传的图像大于 5MB,它会导致表单无法验证。当我上传大于 5MB 的图片时,出现以下错误:

'EditUserProfileForm' 对象没有属性'image'

此表单上肯定有一个“图像”字段。这是一个模型形式,模型也有一个“图像”字段。如果照片小于 5MB,则用户可以成功上传照片,因此没有其他任何损坏。

编辑:我已经更新了 else 语句。当出现图像错误(即超过 5mb)时,打印语句有效,但此时似乎无法在代码中更改图像字段。每当我尝试分别更改模型实例上的值或表单值时,我都会收到一条错误消息,指出“无法更改 UserProfile,因为数据未验证”或“此 QueryDict 实例是不可变的”。

如果表单未通过验证,似乎只有在 forms.py 中才能更改表单值。

【问题讨论】:

  • Custom form validation的可能重复
  • 此答案并未说明如何确定单个字段是否存在错误。这仅说明如何为字段构建自定义验证。我正在寻找确定 django 的内置逻辑或我的自定义验证器是否在此字段上引发了错误。

标签: django django-forms


【解决方案1】:

您可以尝试使用Form.errors.as_data() 解析从表单中获得的验证错误中的错误,这些错误导致它到达“else”分支。

这将返回一个字典,其中字段作为键,错误作为值。您可以循环查看是否有任何验证错误源自“图像”字段。

【讨论】:

  • 所以我试了一下。我能够遍历错误,当错误 == 图像时,我尝试 a) 将表单数据更改为无图像。我被告知“这个 QueryDict 实例是不可变的”。看起来您无法以这种方式修改帖子数据。我认为试图改变模型中的字段值。 Django 会让我这样做:“无法更改用户配置文件,因为数据没有验证。”如果表单未验证需要在forms.py中而不是在if form.is_valid()之后的else部分中完成,似乎更改表单值。不过感谢您提供的信息。
  • 啊,对不起,我误解了您的需要。由于您可能不想尝试从所有验证中排除图像,也许您可​​以修改该循环以显示错误值,并查看它究竟为什么会引发异常(这是您以前无法做到的,因为错误暗示存在'不是一个图像字段开始)。然后,您可以研究实际导致此异常的任何问题。
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多