我正在尝试创建一个应用程序,将视频文件发送到编码服务,从编码服务发送到AWS存储桶。这需要我将文件提供给处理上传的函数,并在从管理员保存对象之前更新fil位置的URL。
上传到编码器进程返回显示错误或成功的JSON格式的信息。我在网站的客户端尝试它没有遇到任何麻烦。但是我不太确定如何使用Django的管理员。
我查看了文档并找到了ModelAdmin.add_view()。我不知道如何获取上传文件的名称和路径,因为这是函数上传到编码器所必需的。
我意识到,一旦过程完成,最好保存所有其他信息,因为编码器会发回ping。
如何访问上传的文件以便我可以在其上运行编码功能,并且当服务从服务接收ping时,是保存所有其他信息的方法吗?
修改
根据要求提供时间表/事件流程。
这就是它现在在前端的工作原理:
我正在尝试确保上传到编码器是在models.py之外完成的,因为它返回了JSON响应中的一些导入信息,可以用来回退错误。
答案 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
中使用它。