Для более общего использования я написал небольшой класс ExtensionValidator
, который расширяет встроенный в Django RegexValidator
.Он принимает одно или несколько расширений, а также необязательное пользовательское сообщение об ошибке.
class ExtensionValidator(RegexValidator):
def __init__(self, extensions, message=None):
if not hasattr(extensions, '__iter__'):
extensions = [extensions]
regex = '\.(%s)$' % '|'.join(extensions)
if message is None:
message = 'File type not supported. Accepted types are: %s.' % ', '.join(extensions)
super(ExtensionValidator, self).__init__(regex, message)
def __call__(self, value):
super(ExtensionValidator, self).__call__(value.name)
Теперь вы можете определить валидатор, встроенный в поле, например:
my_file = models.FileField('My file', validators=[ExtensionValidator(['pdf', 'doc', 'docx'])])