Пользовательские методы администрирования Django в загруженном файле - PullRequest
1 голос
/ 17 января 2012

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

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

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

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

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

Редактировать:

Как запрошено время / поток событий.

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

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

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

1 Ответ

2 голосов
/ 17 января 2012

Было бы вероятно лучше создать пользовательское хранилище .

Если вы хотите переопределить функцию сохраненияадминистратора , тогда вы должны переопределить 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 () называется .

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

Узнайте подробнее о сигналах .

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