当前位置: 首页 > 面试题库 >

将Django的FileField设置为现有文件

席宜修
2023-03-14
问题内容

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

当我做

instance.field = File(file('/folder/file.txt'))
instance.save()

它将文件另存为file_1.txt(下次是_2,等等)。

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


问题答案:

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

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

from mystuff.customs import MyFileStorage

mfs = MyFileStorage()

class SomeModel(model.Model):
   my_file = model.FileField(storage=mfs)


 类似资料:
  • 问题内容: 我正在Django中构建一个Web应用程序。我有一个上传文件的模型,但是无法删除它。这是我的代码: 然后,在“ python manage.py shell”中执行以下操作: 它从数据库中删除,但不删除服务器上的文件。我还能尝试什么? 问题答案: 在Django 1.3之前,当你删除相应的模型实例时,文件会自动从文件系统中删除。你可能正在使用较新的Django版本,因此你必须自己实现从

  • 问题内容: 我试图将磁盘中的文件分配给FileField,但是出现此错误: AttributeError:’str’对象没有属性’open’ 我的python代码: 和我的models.py 预先感谢您的帮助 问题答案: Django使用它自己的文件类型(具有明显增强的功能)。无论如何,Django的文件类型就像装饰器一样工作,因此你可以简单地将其包装在现有文件对象周围,以满足Django API

  • 问题内容: 我正在尝试设置我的上传文件,这样,如果用户joe上传文件,它将转到MEDIA_ROOT / joe,而不是让每个人的文件都转到MEDIA_ROOT。问题是我不知道如何在模型中定义它。这是当前的外观: 所以我想要的不是“。” 作为upload_to,将其作为用户名。 我知道从Django 1.0开始,你可以定义自己的函数来处理upload_to,但是该函数不知道谁将成为谁,所以我有点迷路

  • 我正试图在Heroku部署我的项目,但媒体文件(图像)过了一段时间就被删除了,所以有人告诉我需要使用一个名为“Amazon S3”的服务,我的问题是,如何配置我的项目来使用该服务。谁能帮帮我吗?

  • 问题内容: 这是我的模特。我想要做的是生成一个新文件,并在保存模型实例时覆盖现有文件: 我看到很多有关如何上传文件的文档。但是,如何生成文件,将其分配给模型字段并将Django存储在正确的位置呢? 问题答案: 你想看看Django文档中的FileField和FieldFile,尤其是FieldFile.save()。 基本上,声明为的字段在访问时为你提供class的实例,该实例为你提供了几种与基础

  • 问题内容: 我在django中有一个带有文本框和文件字段的表单。它应该让用户将文本粘贴到该框中或上传文件。如果用户已将文本粘贴到框中,则无需检查fileField。 如何使Forms.FileField()可选? 问题答案: 如果您在派生类中使用,则可以设置: 如果您使用并已分配给该模型,则可以使用 使用哪种格式取决于您如何导出表单以及是否使用基础的ORM(即模型)。