要使用Django FileField还是FilePathField?

时间:2015-10-12 02:53:01

标签: django

我对使用哪个字段感到有点困惑。我需要的只是一个字段,它将保存一个文件(音频和/或另一个图像)

FileField似乎专门用于上传,我认为它对我所需要的东西有点过分,我也不喜欢它会如何自动上传并将文件重命名为唯一的文件名(file_FHjgh758.txt )每次上传内容。

我对FilePathField的问题是,它似乎需要一个绝对路径,这显然会从开发到生产不同,我通过将其添加到模型来解决这个问题......

import os

class Foo(models.Model):

    path = os.path.dirname(os.path.dirname(__file__))
    path = os.join(path, 'media')
    audio = models.FilePathField(path=path)

我不知道这是否安全或正确,并且在线或在文档中没有很多示例可供借鉴。

要清楚,我只想拥有一个可以指向系统中某处文件(音频或图像)的字段。这样做最好的方法是什么?

1 个答案:

答案 0 :(得分:18)

如果您想引用文件系统上已有的文件而不是用户上传的文件,那么FilePathField就是您想要的文件。

在这方面有几条评论:

  • 不要指向应用程序源代码树中的路径。这不安全。

  • 您可以使用设置或环境变量来处理开发与生产路径,例如,在开发/生产设置文件中添加FILE_PATH_FIELD_DIRECTORY设置,并从您的应用中引用此设置:

    from django.conf import settings
    
    class Foo(models.Model):
        audio = models.FilePathField(path=settings.FILE_PATH_FIELD_DIRECTORY)