Ну, когда вы хотите, чтобы ваши пользователи загрузили изображение, вы должны использовать models.ImageField()
в соответствующей модели. Для других типов носителей вы можете использовать models.FileField()
и создать собственный валидатор, чтобы проверить, хотите ли вы .docx или .pdf, et c.
Создайте файл validators.py
в папке вашего приложения и добавьте функцию:
from django.core.exceptions import ValidationError
import os
def validate_file_extension(value):
ext = os.path.splitext(value.name)[1] # [0] returns path & filename
valid_extensions = ['.pdf', '.doc', '.docx', '.jpg', '.png', '.xlsx', '.xls'] # populate with the extensions that you allow / want
if not ext.lower() in valid_extensions:
raise ValidationError('Unsupported file extension.')
Затем в вашем models.py
:
from .validators import validate_file_extension
И, наконец, используйте валидатор для поля вашей модели:
class Document(models.Model):
file = models.FileField(upload_to="documents/", validators=[validate_file_extension])
См. также: