Как проверить расширение загруженного файла?
Я хочу, чтобы в форму можно было загружать только файлы .xlsm.
Это мое поле в models.py
...
pdf = models.FileField( upload_to=customer_directory_path, null=True, blank=True)
...
Как я могу это сделать?
Django Upload Validator - один из вариантов решения этой проблемы: https://pypi.org/project/django-upload-validator/
Вы можете использовать регулярные выражения для проверки расширения файла перед сохранением модели с помощью метода clean() следующим образом:
from django.core.exceptions import ValidationError # for returnig errors
from django.db import models
from django.utils.translation import gettext_lazy as _
import re # import regex python module
class PdfModel(models.Model):
pdf = models.FileField( upload_to=customer_directory_path, null=True, blank=True)
def clean(self):
pattern = re.compile('.*\.xlsm$')
if not pattern.search(self.pdf):
raise ValidationError(_('Only .xlsm files are accepted'))
больше информации о методе clean() здесь
Согласно Django docs, вам нужно сделать следующее:
from django.core.validators import FileExtensionValidator
class YourModel(models.Model):
pdf = models.FileField(upload_to=customer_directory_path, null=True, blank=True, validators=[FileExtensionValidator(allowed_extensions=['xlsm'])])
Это просто проверяет окончание файла и проверяет, что он заканчивается на .xlsm, а если нет, то выдает ошибку ValidationError.
Существует множество способов сделать это, вот некоторые ресурсы, которые я нашел на stack overflow:
- Проверка типа загружаемого файла в Django
- Django: Проверка типа загружаемого файла
- Django - Проверка типа загруженного файла
В следующий раз попробуйте поискать ответы на свой вопрос, прежде чем обращаться к stackoverflow. :)