python - Django文件上传: filename not sticking

标签 python django file upload

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

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 })

我在保存表单之前和之后检查了 request.FILES['theFile'].name 的值。无论出于何种原因,它都完好无损,但似乎从未进入数据库。

最佳答案

这是因为 form.filename 是表单字段,而不是它将保存的值。

您正在寻找这样的东西:

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

替代解决方案:

upload_file = form.save(commit=False)
upload_file.filename = request.FILES['theFile'].name
upload_file.save()

关于python - Django文件上传: filename not sticking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840138/

相关文章:

python - 在 mllib kmeans pyspark 中获取集群标签

python - Django 休息框架 : Order by Serializer Method Field

c - 是否可以在不复制的情况下删除大文件的两端?

Python 行/列混淆

python - 来自数据框的散点图,在 x 轴上有索引

javascript - 如何在 Django 模板过滤器中使用 Sekizai javascript block ?

Java 文本文件大小(文件关闭前)

java - 在文本文件android中对数字进行排序

python - 将数字和字符串列表转换为单个字符串 python

javascript - django 1.6.1 raw_id_fields 打开 'change' 弹出窗口而不是 'select' 弹出窗口