Django模型:使用DateField在FileField中设置参数



背景:我正在创建Django应用程序来管理收据。用户将创建一个新的Receipt,填写一些字段,其中包含有关收据的信息(即成本,项目,购买的日期等(,并上传存储收据的副本。

问题:我想根据用户输入的购买日期将收据 *.pdf文件存储在文件夹中,但是,直到实例化之前,我才能访问self.date.strftime('%Y %B')

示例代码:

class Receipt(models.Model):
    date = models.DateField()
    item = models.CharField(max_length=128)
    scan = models.FileField(upload_to='scans/{d}/'.format(d=date.strftime('%Y %B')),
                           max_length=100)

研究:

这个问题需要做类似的事情,但出于不同的原因。他得到的答案是,如果不覆盖save()方法,这是不可能的。这将如何与文件上传一起使用?

这个问题专门解决了如何使用功能设置FileField的参数;但是,它不涉及使用尚未完成模型的字段(即Receipt(。

我的工作选择是什么?

您需要在运行时更改upload_to文件夹吗?

此功能获取文件夹名称:

def get_upload_to(instance, filename):
        dest = getattr(instance, 'upload_destination', 'scans')
        date = '/{d}/'.format(d=date.strftime('%Y %B')
        return '/'.join([dest, date])

和在上传字段(models.py(调用以上功能:

file = models.FileField(
            upload_to=get_upload_to,
            null=True,
            blank=False
        )

和在您的视图中请求后的模型保存:

your_model = your_form.save(commit=False)
setattr(your_model, 'upload_destination', 'scans/')
your_model.save()

我希望帮助!