Ho bisogno di convalidare il contenuto di un file XML caricato nel mio metodo Clean, ma non riesco ad aprire il file per la convalida. Funziona, nel metodo clean, il file non è stato ancora spostato dalla memoria (o dalla directory temporanea) alla directory di destinazione.Django: apre il file caricato mentre è ancora in memoria; Nel metodo Form Clean?
Ad esempio il seguente codice non funziona perché il file non è stato ancora spostato su quella destinazione. E 'ancora nella memoria (o la directory temporanea):
xml_file = cleaned_data.get('xml_file')
xml_file_absolute = '%(1)s%(2)s' % {'1': settings.MEDIA_ROOT, '2': xml_file}
xml_size = str(os.path.getsize(xml_file_absolute))
Quando guardo la variabile "cleaned_data" Dimostra questo:
{'xml_file': <InMemoryUploadedFile: texting.nzb (application/octet-stream)>}
cleaned_data.get('xml_file')
restituisce solo "texting.nzb" come una stringa.
C'è un altro modo per accedere al file in memoria (o nella directory temporanea)?
Ancora una volta, questo è nel metodo di mia forma clean
che è legato in vista Amministrazione di default. Mi è stato detto più e più volte che tutta la validazione deve essere gestita in un modulo, non nella vista. Corretta?
non ho scritto nulla in vista. Sto usando il metodo "clean" nel mio Form per eseguire la convalida, quindi test utilizzando la vista di amministrazione predefinita. Non sta facendo tutta la validazione in forma "Django way"? –
Non importa dove lo fai. È necessario accedere a request.FILES per ottenere il file temporaneo come mostrato dai documenti. Puoi farlo all'interno della classe Form se vuoi. –
Ho aggiornato la mia risposta con le istruzioni su come ottenere l'oggetto file caricato dall'interno del modulo stesso poiché, nel tuo caso, il file form.is_valid() ha bisogno. –