Django ClearableFileInput - 如何检测是否删除文件

Ale*_*tle 2 django django-forms django-crispy-forms

我正在为我的表单使用 Django Crispy Forms,并带有上传图像的选项(我模型中的 ImageField)

表单按照我的预期呈现,带有清除现有文件的复选框。但是,在处理表单提交时,“图像清除”复选框总是给我一个“无”值。

image_clear = form.cleaned_data.get("image-clear")
print image_clear
Run Code Online (Sandbox Code Playgroud)

在页面的 HTML 中,我注意到输入复选框没有 value 属性,请参阅:

<input id="image-clear_id" type="checkbox" name="image-clear">
Run Code Online (Sandbox Code Playgroud)

所以我想知道这是否是问题所在,但是当我查看 Django 管理站点中的渲染时,相应的 HTML 输入字段也没有值 - 但它仍然标识应该删除图像。

我应该注意,如果我上传新图像,那么这有效,只有在我删除/清除图像的情况下(并且它在 Django 管理页面中工作,所以假设这意味着我的模型定义可以允许没有图像附在模型上)

所以......在我的表单处理中,我如何检测是否应该删除图像?

我确定我在这里遗漏了一些简单的东西 - 非常感谢任何帮助。

Ser*_*kan 5

您不应选中复选框,而应检查文件输入字段的值。如果为False,则可以删除该文件。否则就是上传的文件。参见:https : //github.com/django/django/blob/339c01fb7552feb8df125ef7e5420dae04fd913f/django/forms/widgets.py#L434

    # False signals to clear any existing value, as opposed to just None
    return False
return upload
Run Code Online (Sandbox Code Playgroud)