РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
11 of 818 menu

Поле FileField

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

Параметры

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

FileField( upload_to='uploads/', storage=None, max_length=100, blank=False, null=False, unique=False, db_index=False, default='', validators=[], error_messages=None, help_text='', verbose_name='', )

Параметр upload_to определяет путь внутри директории MEDIA_ROOT, куда будут сохраняться загруженные файлы. Параметр storage позволяет указать пользовательскую систему хранения файлов. Параметр max_length задает максимальную длину строки с путем к файлу в базе данных, по умолчанию 100 символов.

Синтаксис объявления в модели

from django.db import models class Document(models.Model): title = models.CharField(max_length=200) file = models.FileField(upload_to='documents/')

Пример

Объявим модель для хранения загружаемых пользователями документов:

from django.db import models class UploadedFile(models.Model): name = models.CharField(max_length=100) description = models.TextField(blank=True) file = models.FileField(upload_to='uploads/') uploaded_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name

Пример

Создадим экземпляр модели с загруженным файлом:

from myapp.models import UploadedFile from django.core.files import File # Creating instance with file doc = UploadedFile( name='Report', description='Annual financial report' ) # Save file (assuming file is opened) with open('/path/to/report.pdf', 'rb') as f: doc.file.save('report.pdf', File(f)) doc.save()

Пример

Получим доступ к загруженному файлу из модели:

from myapp.models import UploadedFile # Get document doc = UploadedFile.objects.get(name='Report') # Access file properties print(f"File path: {doc.file.path}") print(f"File URL: {doc.file.url}") print(f"File name: {doc.file.name}") print(f"File size: {doc.file.size} bytes")

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

"File path: /media/uploads/report.pdf" "File URL: /media/uploads/report.pdf" "File name: report.pdf" "File size: 102400 bytes"

Пример

Используем динамическую генерацию пути с помощью функции:

from django.db import models import os def user_directory_path(instance, filename): # File will be uploaded to MEDIA_ROOT/user_<id>/<filename> return f'user_{instance.user.id}/{filename}' class UserFile(models.Model): user = models.ForeignKey('auth.User', on_delete=models.CASCADE) title = models.CharField(max_length=100) file = models.FileField(upload_to=user_directory_path) def __str__(self): return self.title

Пример

Проверим существование файла и удалим его:

from myapp.models import UploadedFile # Get document doc = UploadedFile.objects.get(name='Report') # Check if file exists if doc.file: print("File exists") # Delete file from filesystem doc.file.delete(save=True) print("File deleted")

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

"File exists" "File deleted"

Смотрите также

  • поле ImageField,
    которое является специализацией для изображений
  • поле FilePathField,
    которое хранит путь к файлу в файловой системе
  • поле BinaryField,
    которое хранит бинарные данные в базе данных
  • метод save,
    который сохраняет экземпляр модели с файлом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить