我无法将FileField
的网址设置为我想要的内容。
我的模型由
定义class MyModel(models.Model):
pdf_file = models.FileField(upload_to="reports", null=True, blank=True)
# more stuff
我使用:
创建一个实例myModel = MyModel()
myModel.pdf_file = "some_file.pdf"
myModel.save()
由于myModel.pdf_file.url
属性, <MEDIA_URL>/some_file.pdf
会返回<MEDIA_URL>/reports/some_file.pdf
,而我希望它会upload_to
。
我错过了什么?
修改
我首先尝试设置一个File
对象而不是string
,但它复制了我的文件并附加了_<duplication_num>
,所以我首先在tmp文件夹中创建我的文件,并删除它:
myModel.pdf_file = File(open(TMP_FILE_PATH + filename))
myModel.save()
# now that the file is saved to its final location, delete tmp
filepath = os.path.abspath(TMP_FILE_PATH + filename)
os.remove(filepath)
答案 0 :(得分:1)
upload_to
用于上传,您直接指定字符串名称。 upload_to仅在您创建FileField对象时执行操作(通过从表单上传)。
您可以阅读文档here
答案 1 :(得分:0)
upload_to
是一个相对于项目根目录的目录,您上传的文件将被存储。但是你没有为它分配一个文件,你给它分配了一个字符串,这似乎导致你的FileField
假设你的some_file.pdf
中有一个名为MEDIA_ROOT
的文件。
重复:指定文件名(字符串)使FileField
忽略upload_to
中定义的路径,并将给定的字符串作为真实路径。