首页 > 解决方案 > 如何在 Django 中将上传的文件保存到 C:?

问题描述

我的 Django 项目中有一个 PDF 模型。我想将这些文件保存到我的 C: 目录而不是我的项目目录。( 保存到 C:\otc )

我不必像在模型(customer_customer_name)中那样归档它,我只想将它保存在 C 中名为 otc 的文件中:

以及如何为上传的 PDF 文件的名称添加时间戳?

模型.py

def customer_directory_path(self, filename):
    return 'customer_{0}/{1}'.format(self.owner.customer_name, filename)


class Pdf(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=200)
    pdf = models.FileField(upload_to=customer_directory_path)
    type = models.CharField(max_length=200, default='Select', choices=CHOICES)
    year = models.CharField(max_length=200, default='Select')
    created_date = models.DateTimeField(default=datetime.now())

标签: pythondjango

解决方案


如果您FileSystemStorage用作默认文件存储,则upload_to附加到MEDIA_ROOT. 您需要更改MEDIA_ROOTC:是否希望所有上传都在那里或为该字段创建新存储。更多在doc中。

created_date字段应该看起来像这样:

created_date = models.DateTimeField(default=datetime.now)

否则所有行都将具有相同的值。

那么你可以试试:

def customer_directory_path(self, filename):
    filename = "{}_filename".format(self.created_date)
    return 'customer_{0}/{1}'.format(self.owner.customer_name, filename)

顺便说一句:不确定您owner在该功能中的位置。

编辑:

如果您不想创建新的存储,您应该也可以使用这种方法。

pdf = models.FileField(upload_to=customer_directory_path, storage=FileSystemStorage(location="C:"))

推荐阅读