我正在尝试创建一个表单,允许用户上传任何图像文件+ 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文件。
答案 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])