如何在上传完成后处理文件上的任何操作?
我需要在上传后立即在远程服务器上复制上传的文件,从远程服务器获取响应并将其放入数据库。
我试过在ModelAdmin的save_model中这样做:
class MyAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.answer = remote_upload(obj.file.path)
obj.save()
remote_upload是自编写功能,如果我直接运行它,它会成功上传文件。但它在save_model中失败了。 obj.file.path返回一个MEDIA_PATH +文件名,看起来在执行save_model时缺少文件。
我该如何以正确的方式复制文件?
PS。看起来有FileUploadHandler.upload_complete(),但我不确定是否(以及如何)我可以使用它。
答案 0 :(得分:1)
所以要在save_model中保存文件,我只需要在其中调用form.save()函数。像这样:
class MyAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
form.save()
obj.answer = remote_upload(obj.file.path)
obj.save()
这么容易=)
答案 1 :(得分:0)
您可以通过将upload_to设置为函数来指定要复制到的位置。这可以在模型本身中完成。
示例:
def upload_to_special_path(instance, filename):
return #The path that you want to have.
class MyModel(models.Model):
file = models.FileField(upload_to=upload_to_special_path)