上传完成后Django管理进程文件

时间:2013-08-06 16:02:15

标签: python django file-upload django-admin

如何在上传完成后处理文件上的任何操作?

我需要在上传后立即在远程服务器上复制上传的文件,从远程服务器获取响应并将其放入数据库。

我试过在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(),但我不确定是否(以及如何)我可以使用它。

2 个答案:

答案 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设置为函数来指定要复制到的位置。这可以在模型本身中完成。

How to use 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)