我无法将FileField
的url设置为我想要的。
我的模型由
定义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)
upload_to
用于上传,您直接分配字符串名称。upload_to只在创建FileField对象(通过从表单上传)时才会执行操作。
你可以在这里阅读文档
upload_to
是一个相对于您的项目根目录的目录,您上传的文件将存储在其中。但是你没有给它分配一个文件,你给它分配一个字符串,这似乎导致你的FileField
假设你在你的MEDIA_ROOT
中有一个名为some_file.pdf
的文件。
重复:指定文件名(字符串)使FileField
忽略upload_to
中定义的路径,并将给定的字符串作为实际路径。
祝你好运