我对使用哪个字段感到有点困惑。我需要的只是一个字段,它将保存一个文件(音频和/或另一个图像)
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)
我不知道这是否安全或正确,并且在线或在文档中没有很多示例可供借鉴。
要清楚,我只想拥有一个可以指向系统中某处文件(音频或图像)的字段。这样做最好的方法是什么?
答案 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)