Почему валидатор расширений файлов не работает должным образом в django?
Я пытаюсь добавить валидатор расширения файла в поле File моей модели. Но когда я добавляю файл с другим расширением через мой сериализатор, он добавляет расширения, которые я не указал в моем validators.py
Вот код на данный момент
# validators.py
def validate_file_extension(value):
import os
from django.core.exceptions import ValidationError
ext = os.path.splitext(value.name)[1] # [0] returns path+filename
valid_extensions = ["png", "jpg", "jpeg", # for images
"pdf", "doc", "docx", "txt", # for documents
"mp3", "aac", "m4a", "mp4", "ogg"] # for audios
if not ext.lower() in valid_extensions:
raise ValidationError('Unsupported file extension.')
#models.py
class QuestionFile(models.Model):
question = models.ForeignKey(
Question, on_delete=models.CASCADE, related_name='files', null=True, blank=True)
FILE_TYPE = (
('NONE', 'NONE'),
('IMAGE', 'IMAGE'),
('DOCUMENT', 'DOCUMENT'),
('AUDIO', 'AUDIO'),
)
file_type = models.CharField(
choices=FILE_TYPE, max_length=50, null=True, blank=True)
file = models.FileField(
'files', upload_to=path_and_rename, max_length=500, null=True, blank=True, validators=[validate_file_extension])
def __str__(self):
return str(self.question)
и вот вывод в моем сериализаторе для этой модели
"id": ..,
"file": "<filepath>/c-f479b7453519484b827dbc0051bd9a64.html",
"file_type": ..,
"question": ..
Как видно, хотя расширение .html не добавлено в validators.py, оно все равно загружается. Может я допустил какие-то ошибки в коде? Я не могу понять это. Если необходима какая-либо другая информация, дайте мне знать, пожалуйста.
Спасибо
Простая ошибка, Ваш список должен быть таким:
valid_extensions = ['.jpg', '.png', '.mp3']
и когда вы используете:
import os
text = "/path/to/file/file.jpg"
name = os.path.splitext(text)
then
if name[1].lower() in valid_extensions:
pass