我有一个包含文件字段的模型。我想将其限制为 pdf 文件。我在模型中编写了 clean 方法,因为我还想检查 admin 和 shell 级别的模型创建。但它不适用于模型清理方法。然而,表格清洁方法正在发挥作用。
class mymodel(models.Model):
myfile = models.FileField()
def clean():
mime = magic.from_buffer(self.myfile.read(), mime=True)
print mime
if not mime == 'application/pdf':
raise ValidationError('File must be a PDF document')
class myform(forms.ModelForm):
class Meta:
model = mymodel
fields = '__all__'
def clean_myfile(self):
file = self.cleaned_data.get('myfile')
mime = magic.from_buffer(file.read(), mime=True)
print mime
if not mime == 'application/pdf':
raise forms.ValidationError('File must be a PDF document')
else:
return file
如果我上传 pdf,则表单清洁方法中的 mime 正在正确验证(打印“应用程序/pdf”)。但是模型清理方法没有验证。它将 mime 打印为“application/x-empty”。我在哪里做错了?
还有一个问题是,如果模型清理方法引发验证错误,它不会在表单中显示为字段错误,而是显示为非字段错误。为什么这样 ?