Nuestros mejores investigadores agotaron sus reservas de café, por su búsqueda diariamente por la solución, hasta que Perla halló el arreglo en Beanstalk así que ahora la comparte aquí.
Solución:
nunca he usado SVGAndImageFormField
así que realmente no puedo comentar sobre eso. Personalmente hubiera optado por una simple aplicación de FileField
, pero eso depende claramente de los requisitos del proyecto. Ampliaré eso a continuación:
Como se menciona en el comentario, la diferencia básica entre ImageField y FileField es que el primero verifica si un archivo es una imagen usando Pillow:
hereda todo attributes y métodos de FileField, pero también valida que el objeto cargado es una imagen válida.
Referencia: Documentos de Django, código fuente de Django
También ofrece un par de attributes posiblemente irrelevante para el caso de SVG (alto, ancho).
Por lo tanto, el campo del modelo podría ser:
svg = models.FileField(upload_to=..., validators=[validate_svg])
Puedes usar una función como is_svg
como se indica en la pregunta correspondiente:
¿Cómo puedo decir que un archivo es SVG sin usar un número mágico?
Luego una función para validar SVG:
def validate_svg(file, valid):
if not is_svg(file):
raise ValidationError("File not svg")
Resulta que SVGAndImageFormField
no tiene dependencias en DRF ImageField
solo se suma a la validación realizada por django.forms.ImageField
.
Entonces, para aceptar SVG en Django Admin I cambió el modelo especificó una anulación de la siguiente manera:ImageField
a un FileField
y
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = []
field_classes =
'image_field': SVGAndImageFormField,
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
admin.site.register(MyModel, MyModelAdmin)
Ahora acepta todos los formatos de imagen anteriores junto con SVG.
EDITAR: Acabo de descubrir que esto funciona incluso si no cambia de models.ImageField
a models.FileField
. los height
y width
attributes de models.ImageField
seguirá funcionando para los tipos de imágenes de trama y se establecerá en None
para SVG.
Sección de Reseñas y Valoraciones
Si entiendes que ha resultado útil este post, agradeceríamos que lo compartas con el resto seniors y nos ayudes a extender nuestro contenido.