2013-06-21 4 views
0

У меня есть имя файла в списке с папками. Список содержит 2000 имен файлов, подобных этомуКак я могу сделать дерево как меню из списка python

Countries/US/newyork/file1.pdf 
Countries/Australia/Sydney/file1.pdf 
Countries/Canada/Toronto/bla/blabla/file2.pdf 

и так далее.

Я хочу индексировать эти файлы в базе данных, чтобы иметь иерархическую структуру каталогов.

В моем приложении Django я хочу, чтобы отобразить первое меню корневого уровня, как

countries --- US , Australia, canada

Тогда я кто-то нажмите на стране, то это получить второй уровень папок и так далее, и в конце концов я хочу см. файлы, если больше нет папок.

, а не запрашивая мое время хранения Эври, я хочу, чтобы хранить все, что данные в моей базе данных, чтобы мои веб-страницы отображаются из БД и при загрузки пользователь нажмет затем я получить файл из моего Storage

я не в состоянии найти, как я должен сделать модель или таблицу базы данных для этого

+0

Можете ли вы перефразировать первое предложение «У меня есть имя файла в списке с папками». к чему-то понятному? Какой список? –

+0

@ J.C.Leitão, я получаю этот список от amazon S3, и я хочу o индексировать список в моей базе данных – user1958218

ответ

1

Я предлагаю следующий образ:

Создать модели для хранения вашей структуры дерева и файлов, например:

class Node(TreeModel): 
    parent # foreign key to Node 

class File(Model): 
    node # foreign key to Node 
    name # name of file 
    path # path to the file on disk for example 

После что перемещать файлы в одном или нескольких каталогах (прочитать How many files can I put in a directory?) также вы можете переименовать их (например, используя хэш из файлов).

Обновление файл модели, чтобы добавить туда новые пути к вашим файлам.

Сделав это, вы можете легко просматривать файлы и построить путь к файлам и т.д.

Для использования модели Node [Джанго-mptt] [1] (существуют и другие решения для Джанго, Google это), чтобы получить эффективный API для управления Tree-подобной моделью.

Вы также можете создать свой собственный сервер хранения данных Django (или найти множество решений в Интернете).

Обновлено

Вы можете добавлять новые файлы с помощью Джанго администратора. Вы должны использовать брандмаузер хранения amazon s3 django http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html.

Изменение:

class File(Model): 
    node # foreign key to Node 
    name # name of file 
    file # django models.FileField 

В этом случае вам не нужно обновлять индекс.

+0

спасибо за информацию. Я использую Amazon S3 в качестве хранилища. Также я думаю о создании индекса каждую неделю или при добавлении новых файлов. Я подумываю о том, чтобы сначала удалить старые заметки и перепивать каждый раз. Я запустил задание cron по обновлению индекса файла. Это нормально – user1958218

+0

Я не понял, почему мне не нужно обновлять индекс. потому что предположим, что я удалю 3 файла из S3, но у моей базы данных все равно будут такие файлы – user1958218

+0

Я имею в виду, если вы используете django-admin для управления вашими файлами, вам не нужно обновлять индекс. Например, если вы собираетесь удалить или создать файл, вы должны удалить его или создать через django-admin. (для удаления вам нужно создать сигнал, в котором вы физически удаляете файл http://stackoverflow.com/questions/5372934/how-do-i-get-django-admin-to-delete-files-when-i-remove -an-объект-из-datab). Конечно, если вы используете внешние инструменты для управления вашими файлами, которые не работают через django, вы должны поддерживать свой индекс (в этом случае таблицы). –