一尘不染

Django-如何创建文件并将其保存到模型的FileField中?

django

这是我的模特。我想要做的是生成一个新文件,并在保存模型实例时覆盖现有文件:

class Kitten(models.Model):
    claw_size = ...
    license_file = models.FileField(blank=True, upload_to='license')

    def save(self, *args, **kwargs):
        #Generate a new license file overwriting any previous version
        #and update file path
        self.license_file = ???
        super(Request,self).save(*args, **kwargs)

我看到很多有关如何上传文件的文档。但是,如何生成文件,将其分配给模型字段并将Django存储在正确的位置呢?


阅读 913

收藏
2020-03-26

共1个答案

一尘不染

你想看看Django文档中的FileField和FieldFile,尤其是FieldFile.save()。

基本上,声明为的字段FileField在访问时为你提供class的实例FieldFile,该实例为你提供了几种与基础文件进行交互的方法。因此,你需要做的是:

self.license_file.save(new_name, new_contents)

new_name你要分配的文件名在哪里,并且new_contents是文件的内容。请注意,new_contents该实例必须是django.core.files.File或的一个实例django.core.files.base.ContentFile(有关详细信息,请参见给定的手册链接)。这两个选择可以归结为:

# Using File
f = open('/path/to/file')
self.license_file.save(new_name, File(f))
# Using ContentFile
self.license_file.save(new_name, ContentFile('A string with the file content'))
2020-03-26