upload_to属性在保存FileField时似乎不使用



我无法将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中定义的路径,并将给定的字符串作为实际路径。

祝你好运

相关内容

  • 没有找到相关文章

最新更新