【发布时间】:2011-04-22 12:02:06
【问题描述】:
我最终试图通过扩展类型验证 FileField。但我什至无法获得该字段的干净方法来获取 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 snippets 和 solutions 解决这个问题,但我无法让它们使用非模型表单。它们都声明了自定义字段类型。当我这样做时,我会遇到同样的问题;调用 super() 返回一个 None 对象。
【问题讨论】:
-
仅供参考 - 我确实在 request.FILES 中看到了 InMemoryUploadFile 对象。
标签: django django-forms django-validation