覆盖Django ImageField验证

时间:2015-06-04 11:15:11

标签: python django django-models django-forms

我正在尝试创建一个表单,允许用户上传任何图像文件+ SWF文件。 Django的ImageField不支持SWF,所以我需要覆盖它。

我想要做的是检查文件是否为SWF,如果为True,则将其返回。如果它不是SWF,请调用原始方法,该方法将负责文件验证。

但是,我不确定如何实现这一点。这是我想要实现的一个例子,但它不起作用:

from hexagonit import swfheader    


class SwfImageField(forms.ImageField):

    def to_python(self, data):
        try:
            swfheader.parse(data)
            return data
        except:
            return super(SwfImageField, self).to_python(data)

目前实际上只允许 SWF文件。

1 个答案:

答案 0 :(得分:1)

另一种可能最简单的解决方案是使用带有自定义验证器的标准FileField

def my_validate(value):
    ext = os.path.splitext(value.name)[1]  # [0] returns path filename
    valid = ['.jpg', '.swf']
    if ext not in valid:
        raise ValidationError("Unsupported file extension.")

class MyForm(forms.Form):
    file = forms.FileField(validators=[my_validate])