У меня есть модель, содержащая поле файла. Я хочу ограничить его файлами PDF. Я написал чистый метод в модели, потому что я хочу также проверить создание модели на уровне администратора и оболочки. Но он не работает в методе чистой модели. Однако метод чистой формы работает.
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-пусто». Где я делаю неправильно?
Также еще одна проблема заключается в том, что если метод очистки модели вызывает ошибку проверки, она не отображается как ошибка поля в форме, а отображается как ошибки, не связанные с полем. Почему так ?