我需要更改django中的默认文件上传行为,而django网站上的文档相当混乱。如何覆盖django admin的默认文件上传行为?
我有一个域的模型如下:
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和元数据json文件?在这种情况下,重写Doument.save方法并将JSON写入文件字段或将数据存储在TextField中可能会更容易。 – allcaps
我第二@allcaps。如果你可以继续使用Django 1.9并使用Postgres,那么请利用JSONField,否则以模型中的其他结构化方式存储元数据。假设您可以在默认情况下上传新文件时覆盖以前上传的元数据 - 如果您不是,则上传文件是一种有效的方式,因为Django不会自动清除旧上传的文件(或生成的文件你放在那里)。 –