3

我无法将我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对象而不是 a,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)
4

2 回答 2

2

upload_to用于上传,您直接分配字符串名称。仅当您创建 FileField 对象(通过从表单上传)时,upload_to 才会采取行动。

您可以在此处阅读文档

于 2013-06-04T19:28:55.347 回答
1

upload_to是相对于您的项目根目录的目录,您上传的文件将存储在该目录中。但是你没有给它分配一个文件,你给它分配了一个字符串,这似乎导致你假设FileField你有一个名为.some_file.pdfMEDIA_ROOT

重复:分配文件名(字符串)会FileField忽略其中定义的路径,upload_to并将给定的字符串作为真实路径。

祝你好运 :)

于 2013-06-05T01:44:00.620 回答