FilePathField
Поле FilePathField - это поле модели Django, которое предназначено для хранения пути к файлу. В отличие от FileField, которое управляет загрузкой файлов, FilePathField просто предоставляет выбор из существующих файлов в определённой директории на сервере. Это поле полезно, когда нужно выбрать один из заранее подготовленных файлов, например, шаблонов, конфигураций или статических ресурсов.
Основные параметры поля:
-
path- обязательный параметр, указывает путь к директории, из которой будут выбираться файлы. Путь может быть абсолютным или относительным (относительноBASE_DIRпроекта). -
recursive- булевый параметр. Если установлен вTrue, поиск файлов будет выполняться рекурсивно во всех поддиректориях. По умолчаниюFalse. -
match- необязательный параметр, принимает регулярное выражение (строку), по которому фильтруются имена файлов. Например,r"\.txt$"для выбора только текстовых файлов. -
allow_files- булевый параметр, определяет, разрешён ли выбор файлов. По умолчаниюTrue. -
allow_folders- булевый параметр, определяет, разрешён ли выбор директорий. По умолчаниюFalse.
Синтаксис
from django.db import models
class MyModel(models.Model):
file_path = models.FilePathField(path='путь_к_директории', **options)
Пример
Рассмотрим модель, которая хранит путь к выбранному файлу из директории 'templates'.
from django.db import models
class TemplateChoice(models.Model):
name = models.CharField(max_length=100)
template_file = models.FilePathField(path='templates', match=r"\.html$")
def __str__(self):
return self.name
В этом примере поле template_file позволяет выбрать только файлы с расширением .html из директории templates.
Пример
Теперь создадим экземпляр модели и сохраним его с выбранным файлом.
from myapp.models import TemplateChoice
# Создание записи с выбором файла
choice = TemplateChoice.objects.create(
name="Main page template",
template_file="templates/main.html"
)
choice.save()
# Вывод всех сохранённых шаблонов
for item in TemplateChoice.objects.all():
print(item.template_file)
Результат выполнения кода:
"templates/main.html"
"templates/base.html"
"templates/footer.html"
Пример
Если необходимо разрешить выбор как файлов, так и папок, используйте параметры allow_files и allow_folders.
from django.db import models
class Resource(models.Model):
path = models.FilePathField(
path='./static',
recursive=True,
allow_files=True,
allow_folders=True
)
Теперь поле path позволяет выбрать любой файл или папку внутри static и всех её поддиректориях.
Смотрите также
-
поле
FileField,
которое управляет загрузкой файлов на сервер -
поле
ImageField,
которое предназначено для загрузки изображений -
поле
TextField,
которое хранит большие объёмы текста -
поле
CharField,
которое хранит небольшие строки символов