首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Django的FileField设置为现有文件

将Django的FileField设置为现有文件
EN

Stack Overflow用户
提问于 2011-12-01 04:20:29
回答 4查看 42.2K关注 0票数 103

我在磁盘上有一个现有的文件(比如/folder/file.txt),在Django中有一个FileField模型字段。

当我这样做的时候

代码语言:javascript
复制
instance.field = File(file('/folder/file.txt'))
instance.save()

它会将文件重新保存为file_1.txt (下一次为_2,依此类推)。

我理解为什么,但我不想要这种行为-我知道我想要与字段关联的文件确实在那里等着我,我只想让Django指向它。

多么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-01 14:14:49

如果您想永久执行此操作,则需要创建您自己的FileStorage类

代码语言:javascript
复制
import os
from django.conf import settings
from django.core.files.storage import FileSystemStorage

class MyFileStorage(FileSystemStorage):

    # This method is actually defined in Storage
    def get_available_name(self, name):
        if self.exists(name):
            os.remove(os.path.join(settings.MEDIA_ROOT, name))
        return name # simply returns the name passed

现在,在您的模型中,使用修改后的MyFileStorage

代码语言:javascript
复制
from mystuff.customs import MyFileStorage

mfs = MyFileStorage()

class SomeModel(model.Model):
   my_file = model.FileField(storage=mfs)
票数 25
EN

Stack Overflow用户

发布于 2012-06-06 06:43:07

只需将instance.field.name设置为文件的路径

例如:

代码语言:javascript
复制
class Document(models.Model):
    file = FileField(upload_to=get_document_path)
    description = CharField(max_length=100)


doc = Document()
doc.file.name = 'path/to/file'  # must be relative to MEDIA_ROOT
doc.file
<FieldFile: path/to/file>
票数 140
EN

Stack Overflow用户

发布于 2013-08-23 23:08:05

试试这个(doc):

代码语言:javascript
复制
instance.field.name = <PATH RELATIVE TO MEDIA_ROOT> 
instance.save()
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8332443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档