gpt4 book ai didi

django - 验证/清理Django中非模型表单上的FileField?

转载 作者:行者123 更新时间:2023-11-30 23:58:29 33 4
gpt4 key购买 nike

我最终试图通过扩展名类型验证FileField。但是我什至在获取该字段的clean方法来获取POSTed值时都遇到了麻烦。

from django.forms.forms import Form
from django.forms.fields import FileField
from django.forms.util import ValidationError

class TestForm(Form):
file = FileField(required=False)

def clean_file(self):
value = self.cleaned_data["file"]
print "clean_file value: %s" % value
return None

@localhost
def test_forms(request):
form = TestForm()
if request.method == "POST":
form = TestForm(request.POST)
if form.is_valid():
print "form is valid"
return render_to_response("test/form.html", RequestContext(request, locals()))

运行代码时,我得到以下输出:
clean_file value: None
form is valid

换句话说,clean_file方法无法获取文件数据。同样,如果返回None,则该表格仍然有效。

这是我的表单html:
<form enctype="multipart/form-data" method="post" action="#">
<input type="file" id="id_file" name="file">
<input type="submit" value="Save">
</form>

我已经看到了 couple snippetssolutions来解决此问题,但是我无法让它们使用非模型形式。它们都声明自定义字段类型。当我这样做时,我会遇到同样的问题。调用super()返回None对象。

最佳答案

在帖子中实例化request.FILES时不会将其传递到表单中。

 form = TestForm(request.POST, request.FILES)

参见 the documentation

另请注意,您在POST上实例化了两次表单,这是不必要的。将第一个移动到函数末尾的else子句中(与 if request.method == 'POST'处于同一级别)。

关于django - 验证/清理Django中非模型表单上的FileField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3884180/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com