2012-01-17 3 views
1

Я пытаюсь создать приложение, которое отправляет видеофайл в службу кодирования a из службы кодирования в ведро AWS. Это потребовало бы, чтобы я сделал файл доступным для функции, которая обрабатывает загрузку и обновляет URL-адрес местоположения файла перед сохранением объекта у администратора.Способы администрирования Django для загруженного файла

Процесс загрузки в кодировщик возвращает информацию в формате JSON, которая показывает ошибки или успех. У меня не было проблем с проверкой на клиентской стороне сайта. Однако я не совсем уверен, как это сделать с помощью администратора Django.

Я просмотрел документы и нашел ModelAdmin.add_view(). Я не уверен, как я могу получить имя и путь к загруженному файлу, так как это требуется для загрузки функций в кодировщик.

Я понимаю, что лучше всего сохранить всю другую информацию после завершения процесса, так как кодер отправит ответ.

Как получить доступ к загруженному файлу, чтобы я мог запускать на нем функцию кодирования и является ли способ сохранить всю другую информацию, когда служба получает ответ от службы?

Edit:

В соответствии с поручением временной шкалы/поток событий.

Вот как это работает прямо сейчас в передней части:

  • Файла закачанного
  • file_upload_handle проверяет размер файла и длительности
  • файл загружен в кодер (во время загрузки службы кодера передает JSON с информацией о состоянии)
  • кодер отправляет файл на AWS и Pingback к серверу на успех

Что я пытаюсь сделать, чтобы загрузка в кодировщик выполнялась за пределами models.py, поскольку она возвращает некоторую информацию об импорте в ответ JSON, который может быть использован для возврата ошибки.

+0

Можете ли вы опубликовать график событий, которые должны произойти? – jpic

ответ

2

Было бы вероятно лучше create a custom storage.

Если вы хотите только переопределить функцию сохранения админа, то вы должны переопределить save_model():

def save_model(self, request, obj, form, change): 
    """ 
    Given a model instance save it to the database. 
    """ 

    # your custom stuff here, this is the file path, change "upload_field_name" 
    # by your actual FileField name 
    obj.upload_field_name.path 

    obj.save() 

Этот код взят из django/contrib/admin/options.py, который представляет много методов вы можете переопределить.

Или, вы можете подключить функцию к pre_save сигнала как таковой:

from django.db.models import signals 

def encode_upload(sender, instance=None, created=None, **kwargs): 
    # your custom stuff here, this is the file path, change "upload_field_name" 
    # by your actual FileField name 
    instance.upload_field_name.path 

# change YourModelClass by the name of your actual model class 
signals.pre_save.connect(encode_upload, sender=YourModelClass) 

Это заставит encode_upload называться перед тем экземпляр YourModelClass сохраняется. Будь то в админе, в других представлениях, где угодно save() называется.

Обратите внимание, что slot (функция/обратного вызова подключиться к сигналу) должен быть подключен когда сайт начал. Используйте его, например, в models.py.

Узнать more about signals.

+0

Я использовал save_model(), и он работал отлично. Большое вам спасибо за руководство. –

+0

По вопросу. Как я могу сэкономить URL-адрес нового файла, а не тот, который был загружен, и как бы удалить файл, который был первоначально загружен, и было бы хорошо, если бы функция кодирования была оберточной в функции сельдерея? –

+0

Как вы можете видеть с помощью простого SQL SELECT, хранимое значение FileField - это путь к файлу относительно STATIC_ROOT. Поэтому, если у вас есть STATIC_ROOT = '/ foo' и upload_to = 'bar', а ваш новый файл находится в /foo/bar/new/file.ext, установите значение поля файла в bar/new/file.ext. Если он находится в /foo/bar/new_file.ext, установите значение поля файла в bar/new_file.ext. Обратите внимание, что абсолютные пути тоже должны работать, но довольно плохая практика. Что касается удаления файла, то должен работать простой вызов os.unlink с файловым путем в качестве аргумента (model.filefield.path). – jpic

Смежные вопросы