2017-05-11 1 views
0

J'essaye de créer une commande django pour télécharger des fichiers et créer des pages associées pour eux. Mes documents sont des fichiers PDF, et mon problème est de "télécharger" automatiquement ces fichiers dans le bon répertoire "media" cible, sans les copier explicitement avec mon script de commande depuis le 'docs repository' vers le répertoire MEDIA_ROOT défini.Importer des fichiers dans une colection à partir de CLI (commande django)

J'ai tryed à utiliser:

code

f = File(open(file_path, 'r')) 
# models.OfficeDocument is an inheritor of BaseDocument class 
new_document, created = models.OfficeDocument.objects.get_or_create(title=title, 
                     collection=collection, 
                     file=f) 

Erreur

SuspiciousFileOperation: The joined path (<my_local_path>) is located outside of the base path component (<MEDIA_ROOT path>) 

mais Bergeronnette me dit que je ne suis pas dans le bon répertoire (pas MEDIA_ROOT)

Comment puis-je faire cela?

Merci!

Répondre

0

Vous essayez d'enregistrer les documents avec leurs fichiers à l'emplacement actuel, sans les copier d'abord dans le nouvel emplacement. Vous pouvez ajouter du code pour copier les fichiers au bon endroit, ou il semble raisonnable d'imiter ce que le Wagtail documents add view fait ici: instancier un modèle, le nettoyer et appeler sa méthode de sauvegarde. Cela gérera la sauvegarde du document car la propriété upload_to est configurée dans le champ de fichier.

Essayez:

from wagtail.wagtailcore.models import get_root_collection_id 

collection = get_root_collecion_id() 
user = some_user_you_will_attribute_these_to 
doc = Document(uploaded_by_user=user) 
upload_dict = { 
    'title': some_title, 
    'file': f, 
    'collection': collection, 
    'tags': '', 
} 
form = DocumentForm(upload_dict, f, instance=doc, user=request.user) 
if form.is_valid(): 
    form.save() 

Vous pourriez trouver que l'objet fichier doit être quelque chose comme un exemple enveloppé Django UploadedFile à la place, voir https://docs.djangoproject.com/en/1.11/ref/files/uploads/

+0

Je l'ai utilisé une autre méthode: j'utilise l'abstraction de stockage par le "get_default_storage", ce qui me donne une abstraction au stockage. – frague

+0

Et ça marche? Si oui, c'est bon de l'entendre. – nimasmi

+0

@nimasni: Ca marche super bien! – frague