Django文件上传:文件不粘 [英] Django file upload: filename not sticking
问题描述
class UploadFile(models.Model):
...
theFile = models.FileField(upload_to =Genius / Uploads /,null = True)
filename = models.CharField(max_length = 50,blank = True,null =
class UploadFileForm(ModelForm):
class Meta:
model = UploadFile
fields =('title','theFile','date_uploaded' #不要提示文件名
def files_upload(request):
如果request.method =='POST':
form = UploadFileForm(request.POST ,request.FILES)
如果form.is_valid():
form.filename = request.FILES ['theFile']。name#TODO:sanitize!
#form.filename ='foo'
form.save()
return HttpResponseRedirect('/ files / upload / success /')
else:
form = UploadFileForm()
返回render_to_response('files / upload_file.html',{'form':form})
我已经检查了request.FILES ['theFile']的名称。保存表单后。无论什么原因,它是完整的,但从来没有似乎使它进入DB。
这是因为形式.filename
是表单字段,而不是保存的值。
您正在寻找这样的东西:
class UploadFileForm(ModelForm):
def save(self,commit = True):
instance = ModelForm.save ,commit = False)
instance.filename = self.files ['theFile']。name
如果提交:
instance.save()
return instance
class Meta:
model = UploadFile
fields =('title','theFile','date_uploaded',)#不要提示文件名
替代解决方案:
upload_file = form.save(commit = False)
upload_file.filename = request.FILES ['theFile']。name
upload_file.save()
I'm uploading files and storing metadata in a db. Part of the metadata is the file name itself. However, somewhere down the line, the filename seems to not be getting saved! I will paste only what I think are relevant parts of the code to keep this short.
class UploadFile(models.Model):
...
theFile = models.FileField(upload_to = "Genius/Uploads/", null = True)
filename = models.CharField(max_length = 50, blank = True, null = False)
class UploadFileForm(ModelForm):
class Meta:
model = UploadFile
fields = ('title', 'theFile', 'date_uploaded',) # Don't prompt for filename
def files_upload(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
form.filename = request.FILES['theFile'].name # TODO: sanitize!
# form.filename = 'foo'
form.save()
return HttpResponseRedirect('/files/upload/successful/')
else:
form = UploadFileForm()
return render_to_response('files/upload_file.html', { 'form': form })
I have checked the value of request.FILES['theFile'].name before & after saving the form. For whatever reason it is intact but never seems to make it into the DB.
That's because form.filename
is the form field, not the value it will be saving.
You are looking for something like this:
class UploadFileForm(ModelForm):
def save(self, commit=True):
instance = ModelForm.save(self, commit=False)
instance.filename = self.files['theFile'].name
if commit:
instance.save()
return instance
class Meta:
model = UploadFile
fields = ('title', 'theFile', 'date_uploaded',) # Don't prompt for filename
Alternative solution:
upload_file = form.save(commit=False)
upload_file.filename = request.FILES['theFile'].name
upload_file.save()
这篇关于Django文件上传:文件不粘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!