【发布时间】:2017-01-26 04:26:37
【问题描述】:
我需要更改 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 版的上传处理程序类的工作示例吗?
【问题讨论】:
-
你需要 docx 和 metadata json 文件吗?在这种情况下,覆盖 Doument.save 方法并将 JSON 写入文件字段或将数据存储在 TextField 中可能会更容易。
-
我第二个@allcaps。如果您可以继续使用 Django 1.9 并使用 Postgres,请利用 JSONField,否则以其他结构化方式将元数据存储在模型上。这是假设您可以在默认情况下上传新文件时覆盖先前上传的元数据 - 如果您不是,那么文件上传是一种有效的方式,因为 Django 不会自动清除旧上传的文件(或生成的文件你放在那里)。