Подтвердить что ты не робот

Использовать Django FileField или FilePathField?

Я немного смущен о том, какое поле использовать. Мне нужно только поле, которое будет содержать файл (аудио и/или другой для изображения)

FileField, по-видимому, специально предназначен для загрузки, и я думаю, что это немного избыточно для того, что мне нужно, мне также не нравится, как он будет автоматически загружать и переименовывать файлы в уникальное имя файла (файл_FHjgh758.txt) каждый раз что-то загружено.

Проблема с FilePathField заключается в том, что для этого требуется абсолютный путь, который, очевидно, будет отличаться от dev to production, я обошел это, добавив это в модель...

import os

class Foo(models.Model):

    path = os.path.dirname(os.path.dirname(__file__))
    path = os.join(path, 'media')
    audio = models.FilePathField(path=path)

Я понятия не имею, насколько это безопасно или правильно, и примеров в Интернете или в документах нет.

Чтобы быть ясным, я просто хочу иметь поле, которое я могу указать на файл (аудио или изображение) где-то в моей системе. Каким будет лучший способ сделать это?

4b9b3361

Ответ 1

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

В связи с этим несколько комментариев:

  • Не указывайте путь, который находится внутри вашего исходного дерева приложений. Это не безопасно.

  • Вы можете использовать параметры или переменные среды для обработки путей разработки или производства, например, поместите параметр FILE_PATH_FIELD_DIRECTORY в свои файлы настроек разработки/производства и обратитесь к этому параметру из своего приложения:

    from django.conf import settings
    
    class Foo(models.Model):
        audio = models.FilePathField(path=settings.FILE_PATH_FIELD_DIRECTORY)