12
votes

Validation de formulaire Django, propre () et téléchargement de fichier

Quelqu'un peut-il vous éclairer exactement lorsque un fichier téléchargé est réellement écrit à l'emplacement renvoyé par "upload_to" dans le champ Filefield, en particulier en ce qui concerne l'ordre du champ, le modèle et la validation et le nettoyage de formulaires?

À l'heure actuelle, j'ai une méthode "propre" sur mon modèle qui suppose que le fichier téléchargé est en place, il peut donc faire une certaine validation dessus. On dirait que le fichier n'est pas encore enregistré et peut seulement être détenu dans un emplacement temporaire ou en mémoire. Si tel est le cas, comment «l'ouvrir» ou trouver un chemin d'accès si je dois exécuter un processus / programme externe pour valider le fichier?

merci,

ian


0 commentaires

3 Réponses :


10
votes

Le nettoyage de formulaire n'a rien à voir avec enregistrer réellement le fichier ou en enregistrant d'autres données à ce sujet. Le fichier n'est pas sauvegardé avant d'exécuter la méthode Enregistrer () de l'instance de modèle (notez que si vous utilisez modelName.ObjectS.create () Ce Enregistrer () La méthode est appelée pour vous automatiquement).

Le formulaire limité contiendra un objet Open Fichier , vous devez donc pouvoir effectuer une validation sur cet objet directement. Par exemple: xxx


1 commentaires

Toute façon de le faire dans la validation du modèle au lieu de la validation de la forme?



5
votes

Que devez-vous faire dessus? Si votre validation fonctionnera sans fichier temporaire, vous pouvez accéder aux données en appelant lisez () code> sur ce que votre champ de fichier retourne.

def clean_field(self):
    _file = self.cleaned_data.get('filefield')
    contents = _file.read()


2 commentaires

J'aimerais que cette validation passe dans la méthode modèle.clean () plutôt que dans la validation du formulaire, mais cela semble que ce n'est pas possible, est-ce correct? La validation de fichier téléchargée ne peut se produire qu'au niveau de formulaire, à partir de ce qu'il semble que vous dites.


Attends, ne me souviens pas, je me souviens de lire un point de vue sur la façon de le faire .. Laissez-moi aller creuser. Désolé ne le trouve pas. Si le modèle est déjà enregistré, vous pouvez simplement accéder à self.field.file.read ()



1
votes

ou écrivez-le comme champ de formulaire personnalisé. C'est l'idée de base sur la vérification d'un fichier MP3 à l'aide de la bibliothèque 'Mutagen'.

Notes:

  • Vérifiez d'abord la taille du fichier alors si la taille correcte écrivez à l'emplacement TMP.
  • écrira le fichier à l'emplacement temporaire spécifié dans les paramètres, vérifiez son MP3, puis supprimez-le.

    Le code: xxx


0 commentaires