gpt4 book ai didi

python - 如何重写模型的保存方法来更改文件字段名称?

转载 作者:行者123 更新时间:2023-12-01 07:37:44 25 4
gpt4 key购买 nike

我的 django 应用程序中有一个 ModelForm,它允许用户上传文件并将其存储到 aws storage s3。我想要做的是将文件从其原始名称重命名为字段 timestamp 的名称。到目前为止我所尝试的是覆盖模型的保存方法。这是我的代码:

模型.py

 from converter.storage_backends import CsvStorage
from django.db import models
from django.utils import timezone
import time



class CSVUpload(models.Model):
csv_file = models.FileField(storage=CsvStorage())
timestamp = models.CharField(max_length=1000, default= time.time())

def __str__(self):
return self.csv_file


def save(self, *args, **kwargs):
self.csv_file.name = self.timestamp + ".csv"
super(CSVUpload, self).save(*args, **kwargs)

表单.py

  from django import forms
from .models import CSVUpload
import time

class CsvForm(forms.ModelForm):

csv_file = forms.FileField(widget=forms.FileInput(
attrs= {
'class': 'form-group',
}
))

timestamp = forms.CharField(initial = time.time())

class Meta:
model = CSVUpload
fields = ('csv_file', 'timestamp',)

def save(self):
csvfile = super(CsvForm, self).save()
return csvfile

我的观点:

 def uploadcsv(request):
if request.method == 'POST':
form = CsvForm(request.POST, request.FILES)
if form.is_valid():
return redirect(about)
else:
form = CsvForm()
return render(request, 'myapp/uploadcsv.html',{'form': form})

编辑

存储_backends.py

  from storages.backends.s3boto3 import S3Boto3Storage 
from django.conf import settings

class CsvStorage(S3Boto3Storage):
location = settings.AWS_CSV_LOCATION
file_overwrite = False

尽管如此,当我上传文件时,它并未到达存储桶。我不确定出了什么问题,但我怀疑它出在 save 方法上。有人可以帮助我了解如何解决这个问题吗?我很感激任何帮助

最佳答案

Django 有一个 FileField 内置参数,它接受一个函数,您可以在其中指定对象的文件名。该参数名为upload_to,详细信息可参见 here .

关于python - 如何重写模型的保存方法来更改文件字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56902155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com