简体   繁体   English

上传完成后的Django管理流程文件

[英]Django admin process file after upload complete

How do I process any operation on file after its upload is completed? 上传完成后,如何处理文件上的任何操作?

I need to copy uploaded file on remote server immedeatly after upload, get response from remote server and put it into database. 上传后,我需要立即将复制的文件复制到远程服务器上,从远程服务器获取响应并将其放入数据库中。

I have tried to do it in save_model of ModelAdmin like this: 我试图在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 is self-written function, it successfully uploads a file, if I run it directly. remote_upload是自写函数,如果我直接运行它,它将成功上传文件。 but it fails in save_model. 但是在save_model中失败。 obj.file.path returns an MEDIA_PATH + filename and it looks like file is missing on moment of of save_model executing. obj.file.path返回一个MEDIA_PATH +文件名,看起来在执行save_model时文件丢失。

How should I copy file the right way? 我应该如何正确复制文件?

ps. PS。 It looks like there is FileUploadHandler.upload_complete(), but I'm not sure if (and how) I can use it. 看起来好像有FileUploadHandler.upload_complete(),但是我不确定是否(以及如何)使用它。

So to save file in save_model I just have to call form.save() function in it. 因此,要将文件保存在save_model中,我只需要在其中调用form.save()函数。 Like this: 像这样:

class MyAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        form.save()
        obj.answer = remote_upload(obj.file.path)
        obj.save()

So easy =) 很简单=)

You can specify where you want to copy to by setting the upload_to as a function. 您可以通过将upload_to设置为函数来指定要复制到的位置。 This can be done in the Model itself. 这可以在模型本身中完成。

How to use upload_to 如何使用upload_to

Example: 例:

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM