Могу ли я использовать только TemporaryFileUploadHandler для определенного FileField? - PullRequest
3 голосов
/ 06 марта 2011

Для сайта, который я только строю, я создал собственный FileField, AudioFileField. В AudioFileForm я теперь хочу проверить, является ли файл аудиофайлом или нет. Для этого я использую sox, командную строку, которую я вызываю через подпроцесс. В функции to_python форм я скопировал код из ImageFileField:

#Either we have a path or we
# have to create a temporary one.
if hasattr(data, 'temporary_file_path'):
    file = data.temporary_file_path()
else:
    if hasattr(data, 'read'):
        file = StringIO(data.read())
    else:
        file = StringIO(data['content'])
    # save file to temporary_file_path? Where is temporary_file_path?
    # can i get temporary_file_path from settings, defaults?

check = subprocess.Popen([sox,'--i','-t','%s'%self.path], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
filetype = check.communicate()[0]
if not filetype:
    raise forms.ValidationError('File is not an audiofile')

Подумав об этом, я подумал, что было бы полезно просто принудительно использовать TemporaryFileUploadHandler для AudioFileField. Это избавило бы меня от необходимости писать собственный код для создания временного файла. Как я могу это сделать?

1 Ответ

1 голос
/ 06 марта 2011

Просто создайте подкласс для модели TemporaryFileUploadhandler и перепишите метод сохранения с вашим пользовательским кодом проверки. И все сопутствующие ритуалы:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...