Django上传文件的自定义管理方法

时间:2012-01-17 17:49:59

标签: python django

我正在尝试创建一个应用程序,将视频文件发送到编码服务,从编码服务发送到AWS存储桶。这需要我将文件提供给处理上传的函数,并在从管理员保存对象之前更新fil位置的URL。

上传到编码器进程返回显示错误或成功的JSON格式的信息。我在网站的客户端尝试它没有遇到任何麻烦。但是我不太确定如何使用Django的管理员。

我查看了文档并找到了ModelAdmin.add_view()。我不知道如何获取上传文件的名称和路径,因为这是函数上传到编码器所必需的。

我意识到,一旦过程完成,最好保存所有其他信息,因为编码器会发回ping。

如何访问上传的文件以便我可以在其上运行编码功能,并且当服务从服务接收ping时,是保存所有其他信息的方法吗?

修改

根据要求提供时间表/事件流程。

这就是它现在在前端的工作原理:

  • 文件已上传
  • file_upload_handle检查文件大小和持续时间
  • 文件上传到编码器(在上传期间编码器服务发送带有状态信息的JSON)
  • 编码器将文件发送到AWS,并在成功时将pingback发送到服务器

我正在尝试确保上传到编码器是在models.py之外完成的,因为它返回了JSON响应中的一些导入信息,可以用来回退错误。

1 个答案:

答案 0 :(得分: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