背景:我正在创建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()
我希望帮助!