【问题标题】:Django models.FileField - store only the file name not any paths or folder referencesDjango models.FileField - 只存储文件名而不是任何路径或文件夹引用
【发布时间】:2013-04-04 18:54:06
【问题描述】:

我正在使用 Django 的管理站点来管理一些数据 - 但不是构建 web 应用程序。我需要文件上传字段来只存储数据库中的文件名。

现在我可以获得如下绝对路径: /Users/me/uploads/file.png

或者使用upload_to参数在数据库中得到类似这样的东西: 上传/file.png

我怎样才能让它变成这样: 文件.png

编辑:

我正在使用 sqlite 数据库并在另一个客户端中使用 - 所以在 db 条目中包含任何路径对我来说没有意义。

谢谢!

【问题讨论】:

    标签: python django filefield


    【解决方案1】:

    我会保留 FileField 并使用 python os.path.basename 来提取文件名。

    这可以用属性封装

    class MyModel(models.Model):
       file = models.FileField(...)
    
       @property
       def filename(self):
           return os.path.basename(self.file.name)
    

    【讨论】:

    • os.path.basename 是您正在寻找的,但 luc 在这里的答案确实以非常 django/pythonesque 的方式封装了它。
    • 这实际上无济于事 - 我们在另一个客户端中使用 sqllite 数据库,所以我希望所有路径都被完全删除。
    • 我认为将编辑发布到另一个答案更清楚
    【解决方案2】:

    FileFieldupload_to 参数可以是可调用的。见the docs

    如果你真的只需要存储文件名,我认为你可以这样做。我自己没试过,但我认为它有效。

    def only_filename(instance, filename):
        return filename
    
    class MyModel(models.Model):
        file = models.FileField(upload_to=only_filename)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-17
      • 2017-02-15
      • 2017-11-28
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      相关资源
      最近更新 更多