Python 如何更改存储在磁盘上的文件名-django,s3
我正在尝试更改用户上载的文件名。我可以让它更改文件名,但它仍然作为原始文件名存储在S3服务器中 Django说--“该文件是作为在数据库中保存模型的一部分保存的,因此在保存模型之前,不能依赖磁盘上使用的实际文件名。” 你们知道在我的视图、表单或模型中的什么地方放置函数以允许我更改磁盘上的文件名吗 从forms.py:Python 如何更改存储在磁盘上的文件名-django,s3,python,django,amazon-s3,Python,Django,Amazon S3,我正在尝试更改用户上载的文件名。我可以让它更改文件名,但它仍然作为原始文件名存储在S3服务器中 Django说--“该文件是作为在数据库中保存模型的一部分保存的,因此在保存模型之前,不能依赖磁盘上使用的实际文件名。” 你们知道在我的视图、表单或模型中的什么地方放置函数以允许我更改磁盘上的文件名吗 从forms.py: class AddAttachmentForm(forms.ModelForm): class Meta: model = Attachment
class AddAttachmentForm(forms.ModelForm):
class Meta:
model = Attachment
fields = ('attachment',)
labels = {
'attachment': ''
}
widgets = {
'attachment': forms.FileInput(attrs={'style':'display:none;'})
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
field.error_messages = {
'required': '{fieldname} is required'.format(fieldname=field.label),
}
来自models.py
class Attachment(models.Model):
def rand_str(n): return ''.join([random.choice(string.ascii_letters + string.digits) for i in range(n)])
random_folder = rand_str(75)
user = models.ForeignKey('User', on_delete=models.CASCADE, null=True)
competency = models.ForeignKey('Competency', related_name="attachments", on_delete=models.CASCADE)
attachment = models.FileField(upload_to=random_folder, blank=True)
attacher = models.ForeignKey('User', related_name='attacher', on_delete=models.SET_NULL, null=True)
filename = models.CharField(max_length=255)
file_type = models.CharField(max_length=255, null=True, blank=True)
date_attached = models.DateTimeField(null=True, blank=True)
从views.py
form = AddAttachmentForm(request.POST, request.FILES)
if form.is_valid():
attachment = form.save(commit=False)
attachment.user = student
attachment.attacher = self.request.user
attachment.date_attached = timezone.now()
attachment.competency = competency
attachment.filename = request.FILES['attachment'].name
attachment.save()
显示您的
random\u文件夹
函数。random\u文件夹只是一个包含随机字符串的变量。rand_str是一个函数,如models.py所示。对的我遗漏了什么?啊,好吧,它应该是一个函数,它将另外负责为您重命名文件。阅读