FilePathField

Поле FilePathField - это поле модели Django, которое предназначено для хранения пути к файлу. В отличие от FileField, которое управляет загрузкой файлов, FilePathField просто предоставляет выбор из существующих файлов в определённой директории на сервере. Это поле полезно, когда нужно выбрать один из заранее подготовленных файлов, например, шаблонов, конфигураций или статических ресурсов.

Основные параметры поля:

Синтаксис

pythonfrom django.db import models

class MyModel(models.Model):
  file_path = models.FilePathField(path='путь_к_директории', **options)

Пример

Рассмотрим модель, которая хранит путь к выбранному файлу из директории 'templates'.

pythonfrom 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.

Пример

Теперь создадим экземпляр модели и сохраним его с выбранным файлом.

pythonfrom 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)

Результат выполнения кода:

python"templates/main.html"
"templates/base.html"
"templates/footer.html"

Пример

Если необходимо разрешить выбор как файлов, так и папок, используйте параметры allow_files и allow_folders.

pythonfrom 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,
    которое хранит небольшие строки символов