gpt4 book ai didi

Django/Python : How to change filename when saving file using models. 文件字段?

转载 作者:行者123 更新时间:2023-12-04 23:06:03 25 4
gpt4 key购买 nike

我发现这个例子使用 FileField 上传文件,效果很好。

https://simpleisbetterthancomplex.com/tutorial/2016/08/01/how-to-upload-files-with-django.html

问题是它保存了正在上传的文件的原始文件名。我不想要那个。我可以通过覆盖保存功能来更改 models.py 中的文件名(见下文)。在我的一生中,当我从 views.py 执行 form.save() 时,我无法弄清楚如何传递文件名。我需要知道另一个进程的文件名。我什至想过从 models.py 保存函数返回一个文件名。我有点菜鸟,所以请原谅任何遗漏的细节。我搜索了这个网站并阅读了大量文档,但我遗漏了一些东西。任何意见,将不胜感激。

表单.py

class DocumentForm(forms.ModelForm):
message = forms.CharField(widget=forms.Textarea(attrs={'rows': 5, 'cols': 50}))

class Meta:
model = Document
fields = ('description', 'document', )

模型.py
class Document(models.Model):
description = models.CharField(max_length=255, blank=True)
document = models.FileField(upload_to='atlasapp/documents/')
uploaded_at = models.DateTimeField(auto_now_add=True)

def save(self, *args, **kwargs):
randomNum = random.randint(10000,90000)
new_name = str(randomNum) + ".txt"
self.document.name = new_name
super(Document, self).save(*args, **kwargs)

View .py
def model_form_upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('model_form_upload')
else:
form = DocumentForm()
return render(request, 'model_form_upload.html', {'form': form})

最佳答案

你能不能调用save()在表格上 commit=False ,在Document上设置名称文件,然后保存 Document ?例如:

def model_form_upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
document = form.save(commit=False)
document.name = 'some_new_name'
document.save()
return redirect('model_form_upload')
else:
form = DocumentForm()
return render(request, 'model_form_upload.html', {'form': form})

关于Django/Python : How to change filename when saving file using models. 文件字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49711914/

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