使用文件字段编辑Django模型而不重新上传文件

sea*_*ean 9 django-forms django-file-upload

下面是我项目中django代码的简化版本; 它允许用户上传文件并给它一个标题.此功能非常有效.但是,当用户稍后重新编辑表单时,会重新显示文件和标题,但是当用户提交文件时会清空文件.重新打开以进行编辑的表单的文件字段如下所示:

目前: media_location/uploadedfile.mp3

更改: [选择文件]无文件选择

在我提交之后,它是:

  • 此归档是必需的

[选择文件]无文件选择

如何获取它以便用户不必重新上载文件?对于我来说,一旦提交完成后字段是否只读,或者它是否仍然可编辑并不重要.完成的项目不适用于客户端,只能供一小组可信用户使用,但我仍希望尽可能遵循最佳实践.谢谢你的帮助.

Django代码:

models.py

class Recording(models.Model):
    rec_title=models.CharField(max_length=200,blank=True)
    rec_file = models.FileField(upload_to='recordings')
Run Code Online (Sandbox Code Playgroud)

forms.py

from django import forms 
from songstorage.models import Recording
class RecordingForm(forms.ModelForm):
    rec_file=forms.FileField(label='Upload File')
    rec_title=forms.CharField(label='Recording Title',required=False)       
    class Meta:
        model=Recording
Run Code Online (Sandbox Code Playgroud)

views.py

def addrecordings(request,recordingfile):
    #if there is a recordingfile in the url, the user is editing...
    if recordingfile:
        recording=Recording.objects.get(rec_title=recordingfile)
        recording_form = RecordingForm(instance=recording)
    #...Otherwise a new form is createing a new one
    else:
        recording_form = RecordingForm(request.POST, request.FILES)

    #When the form is submitted, do the following:
    if request.method == 'POST': 
        #check if its valid
        if recording_form.is_valid():
            recording_form.save() 
            #if sucessfully submitted, redirect
            return redirect('/recordings/')
    return render_to_response('addrecordings.html',{'recording_form':recording_form},context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

Jam*_*Lin 1

我遇到了同样的问题,无法弄清楚如何也无法搜索任何有用的东西,我当前的解决方案是在您的场景中使用另一种形式:

class RecordingUpdateForm(RecordingForm):
    rec_file=forms.FileField(label='Upload File', required=False)
Run Code Online (Sandbox Code Playgroud)

唯一的区别是我使用的是基于 UpdateView 类的视图,因此您必须修改视图函数才能使用RecordingUpdateForm更新。