Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改存储在磁盘上的文件名-django,s3_Python_Django_Amazon S3 - Fatal编程技术网

Python 如何更改存储在磁盘上的文件名-django,s3

Python 如何更改存储在磁盘上的文件名-django,s3,python,django,amazon-s3,Python,Django,Amazon S3,我正在尝试更改用户上载的文件名。我可以让它更改文件名,但它仍然作为原始文件名存储在S3服务器中 Django说--“该文件是作为在数据库中保存模型的一部分保存的,因此在保存模型之前,不能依赖磁盘上使用的实际文件名。” 你们知道在我的视图、表单或模型中的什么地方放置函数以允许我更改磁盘上的文件名吗 从forms.py: class AddAttachmentForm(forms.ModelForm): class Meta: model = Attachment

我正在尝试更改用户上载的文件名。我可以让它更改文件名,但它仍然作为原始文件名存储在S3服务器中

Django说--“该文件是作为在数据库中保存模型的一部分保存的,因此在保存模型之前,不能依赖磁盘上使用的实际文件名。”

你们知道在我的视图、表单或模型中的什么地方放置函数以允许我更改磁盘上的文件名吗

从forms.py:

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所示。对的我遗漏了什么?啊,好吧,它应该是一个函数,它将另外负责为您重命名文件。阅读