Как проверить расширение загруженного файла?

Я хочу, чтобы в форму можно было загружать только файлы .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:

В следующий раз попробуйте поискать ответы на свой вопрос, прежде чем обращаться к stackoverflow. :)

Вернуться на верх