Django文件上传:文件不粘 [英] Django file upload: filename not sticking

查看:145
本文介绍了Django文件上传:文件不粘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在上传文件并将数据库存储在数据库中。元数据的一部分是文件名本身。然而,在某处下来,文件名似乎没有得到保存!我将只粘贴我认为代码的相关部分以保持这个简短。

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆