将文本区域的内容保存到Django 1.6中的FileField

时间:2014-01-27 23:19:57

标签: python django python-2.7 filefield

我最近因为我的django项目而遇到了一个奇怪的问题,我想和你分享这个问题。好吧,在我的项目中,我想让用户有可能更新他之前上传的文本文件的内容,为此,我考虑将文件的内容复制到textarea,在那里进行修改,并在提交修改后,更新文件。事实上,我在这个论坛中找到了这个解决方案,它将更新保存到另一条路径!这是建议的解决方案:

views.py:

 def update_file(request, id):
    file = UploadedFile.objects.get(pk=id)
    if request.method == "POST":
       from django.core.files import File
       f = open(file.docfile.path,'w+b')
       content = request.POST['content']
       f.write(content)
       file.docfile = File(f)
       file.save()
       return HttpResponseRedirect('/home/')
    else:
       docfile = file.docfile.read()
       return render_to_response('update_file.html',{'file':file,  'docfile' :
                   docfile}, context_instance=RequestContext(request))

update_file.html:

<form action="/update_file/{{file.id}}/" method="post" enctype="multipart/form-data"> 
{% csrf_token %}
    <p><textarea name="content">
        {{docfile}}
    </textarea></p>
    <p><input type="submit" value="Enregistrer"/></p>
</form>

当我运行此代码时,我在屏幕上打印文本,正常更新并将其保存回数据库,但在不同的路径中,例如,包含文件的路径为:“media / documents / username /“,但在修改文件后,它将保存在以下目录中:”documents / username // home / Ubuntu-user / file_sharing_project / file_sharing_project / media / documents / username /“等因此路径以递归方式变化!关于这个问题的任何线索,对于记录,我只是django和python中的初学者!

1 个答案:

答案 0 :(得分:1)

如果您查看https://docs.djangoproject.com/en/dev/ref/files/file/处的文档 它说它不会替换文件而是创建一个新文件。

所以你可以在这里采取措施, 销毁旧文件,你可以新建一个。

或者只是保存了所有这些内容,用户可能还希望在某个时间点看到旧版本。

此外,您可能还想考虑在完成文件后关闭文件。