这是我的模特。我想要做的是生成一个新文件,并在保存模型实例时覆盖现有文件:
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存储在正确的位置呢?
你想看看Django文档中的FileField和FieldFile,尤其是FieldFile.save()。
基本上,声明为的字段FileField在访问时为你提供class的实例FieldFile,该实例为你提供了几种与基础文件进行交互的方法。因此,你需要做的是:
FileField
FieldFile
self.license_file.save(new_name, new_contents)
new_name你要分配的文件名在哪里,并且new_contents是文件的内容。请注意,new_contents该实例必须是django.core.files.File或的一个实例django.core.files.base.ContentFile(有关详细信息,请参见给定的手册链接)。这两个选择可以归结为:
new_name
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'))