Yas*_*ari 6 python django svg django-forms
我正在切换到SVG图像来代表我的电子商务平台上的类别.我之前models.ImageField在Category模型中使用它来存储图像,但forms.ImageField验证不能处理基于矢量的图像(因此拒绝它).
我不需要对有害文件进行彻底验证,因为所有上传都将通过Django Admin完成.看起来我必须models.FileField在我的模型中切换到a ,但我确实希望警告不要上传无效图像.
Nick Khlestov 在django-rest-framework的 ImageField上写了一个SVGAndImageFormField(在文章中找到源代码,我没有足够的声誉发布更多链接).我如何使用这个解决方案而不是Django的ImageField(而不是DRF)?
我从未使用过,SVGAndImageFormField所以我无法对此发表评论。就我个人而言,我本来会选择的简单应用程序FileField,但这显然取决于项目要求。我将在下面对此进行扩展:
如评论中所述,ImageField和FileField之间的基本区别在于,第一个使用Pillow检查文件是否为图像:
从FileField继承所有属性和方法,但还验证上载的对象是有效的图像。
它还提供了一些可能与SVG情况无关的属性(高度,宽度)。
因此,模型字段可以是:
svg = models.FileField(upload_to=..., validators=[validate_svg])
Run Code Online (Sandbox Code Playgroud)
您可以使用is_svg相关问题中提供的类似功能:
然后是一个验证SVG的函数:
def validate_svg(file, valid):
if not is_svg(file):
raise ValidationError("File not svg")
Run Code Online (Sandbox Code Playgroud)
事实证明,它SVGAndImageFormField与DRF没有任何依赖关系ImageField,仅增加了由进行的验证django.forms.ImageField。
因此,为了在Django Admin中接受SVG,我将模型的更改为指定了覆盖,如下所示:ImageField,FileField并
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)
Run Code Online (Sandbox Code Playgroud)
现在,它可以接受所有以前的图像格式以及SVG。
编辑:刚刚发现,即使您不从切换到,也models.ImageField可以使用models.FileField。的height和width属性models.ImageField仍然适用于栅格图像类型,并且将其设置None为SVG。
| 归档时间: |
|
| 查看次数: |
6279 次 |
| 最近记录: |