如何覆盖django admin的默认文件上传行为?

时间:2016-09-18 11:03:04

标签: python django

我需要更改django中的默认文件上传行为,而django网站上的文档相当混乱。

我有一个带有字段的模型如下:

class document (models.Model):
    name = models.CharField(max_length=200)
    file = models.FileField(null=True, upload_to='uploads/')

我需要在上传文件时创建一个包含元数据的.json文件。例如,如果我上传文件mydocument.docx,我需要在uploads /文件夹中创建mydocument.json文件,并添加有关文档的元信息。

从我可以从文档中解读我需要创建一个文件上传处理程序作为django.core.files.uploadhandler.FileUploadHandler的子类。它还继续说我可以在任何我想要的地方定义它。

我的问题:定义子类的最佳位置在哪里?同样来自这里的文档https://docs.djangoproject.com/en/1.8/ref/files/uploads/#writing-custom-upload-handlers看起来像子类如下:

class FileUploadHandler(object):
    def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None):
        # do the acctual writing to disk        
    def file_complete(self, file_size):
        # some logic to create json file

有没有人有一个适用于django 1.8版的上传处理程序类的工作示例?

1 个答案:

答案 0 :(得分:1)

一个选项可能是在用于最初上传文件的(模型)表单上生成.json文件。覆盖save()的{​​{1}}方法,以便在保存模型后立即生成文件。

ModelForm

如果您使用自定义存储来处理S3这样的事情,我在本地测试了这个,但YMMV。