Je dois valider le contenu d'un fichier XML téléchargé dans ma méthode Form clean, mais je ne parviens pas à ouvrir le fichier pour validation. Il semble que, dans la méthode clean, le fichier n'a pas encore été déplacé de la mémoire (ou du répertoire temporaire) vers le répertoire de destination. Par exemple, le code suivant ne fonctionne pas car le fichier n'a pas encore été déplacé vers cette destination. Par exemple, le code suivant ne fonctionne pas. Il est encore en mémoire (ou le répertoire temporaire):Django: Ouvrir le fichier téléchargé alors qu'il est encore en mémoire; Dans la méthode Form Clean?
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))
Quand je regarde la variable "cleaned_data" il montre ceci:
{'xml_file': <InMemoryUploadedFile: texting.nzb (application/octet-stream)>}
cleaned_data.get('xml_file')
ne retourne "texting.nzb" comme une chaîne.
Existe-t-il un autre moyen d'accéder au fichier en mémoire (ou au répertoire temporaire)?
Encore une fois, cela est dans ma méthode de formulaire clean
qui est lié dans la vue de l'administration par défaut. On m'a dit à maintes reprises que toute validation devrait être traitée dans un formulaire, pas la vue. Correct?
Je n'ai pas écrit quoi que ce soit dans une vue. J'utilise la méthode "clean" dans mon formulaire pour effectuer la validation, puis je teste en utilisant la vue d'administration par défaut. Ne fait-on pas toute la validation dans le formulaire de la "manière Django"? –
Peu importe où vous le faites. Vous devez accéder à request.FILES pour obtenir le fichier temporaire comme le montrent les documents. Vous pouvez le faire dans la classe Form si vous le souhaitez. –
J'ai mis à jour ma réponse avec des instructions sur la façon d'obtenir l'objet fichier téléchargé à l'intérieur du formulaire lui-même puisque, dans votre cas, le formulaire.is_valid() a besoin du fichier. –