I need to validate the contents of an uploaded XML file in my Form clean method, but I\'m unable to open the file for validation. It seams, in the clean method, the file hasn\'t
I'm assuming that you've bound your form to the files using:
my_form = MyFormClass(request.POST, request.FILES)
If you have, once the form has been validated, you can access the file content itself using the request.FILES dictionary:
if my_form.is_valid():
data = request.FILES['myfile'].read()
The request.FILES['myfile'] object is an UploadedFile object, so it supports file-like read/write operations.
If you need to access the file contents from within the form's clean
method (or any method of the cleaning machinery), you are doing it right. cleaned_data.get('xml_file')
returns an UploadedFile object. The __str__
method of that object just prints out the string, which is why you see only the file name. However, you can get access to the entire contents:
xml_file = myform.cleaned_data.get('xml_file')
print xml_file.read()
This section of the docs has some great examples: http://docs.djangoproject.com/en/dev/topics/http/file-uploads/