如何修改 django ImageField 以接受 svg 文件

how to modify django ImageField to accept svg files

我在后端使用 django rest 框架(版本 3.12.2),在前端使用 React/Next js。

我的目标很简单,我想将图片上传到 photo_main 字段。

不幸的是,我在尝试上传 svg 图像时收到一条错误消息(png、jpg 和 jpeg 都可以正常工作)

错误消息

{"photo_main":["Upload a valid image. The file you uploaded was either not an image or a corrupted image."]}

模特

class Recipe(models.Model):
    id = models.UUIDField( 
        primary_key=True,
        default=uuid.uuid4,
        editable=False,
    )
    author = models.ForeignKey(get_user_model() , on_delete=models.CASCADE, null=True, related_name='author') 
    photo_main = models.ImageField(upload_to='media/', blank=True)
    title = models.CharField(max_length=150)
    description = models.TextField(blank=True)

提前致谢

所以在浏览论坛后我找到了解决方案:

validators.py

import os
from django.core.exceptions import ValidationError

def validate_file_extension(value):
    ext = os.path.splitext(value.name)[1]  # [0] returns path+filename
    valid_extensions = ['.jpg', '.jpeg', '.png', '.svg']
    if not ext.lower() in valid_extensions:
        raise ValidationError('Unsupported file extension.')

models.py

from django.core.validators import validate_image_file_extension

image = models.ImageField('Image', upload_to=image_upload_path, validators=[validate_file_extension])