Django:如何使用当前文件路径预填充文件上载路径?

时间:2011-09-06 16:54:53

标签: django django-templates django-forms django-views

我有一个模型表单,我的视图会生成一个用于编辑内容的HTML表单。目前,它能够提取当前存储的文本内容,如下所示:

@login_required
def edit_person(request, s_id, p_id):
    p = get_object_or_404(Person, id=p_id)

    if request.method == 'POST': 
        form = PersonForm(request.POST, request.FILES)
        if form.is_valid():
            p.name = request.POST['name']
            p.title = request.POST['title']
            handle_uploaded_file(request.FILES['photo'], request.FILES['photo'].name, 'media/images/people/')
            p.photo = request.FILES['photo']
            p.order = request.POST['order']  
            p.save()
            return HttpResponseRedirect('/section/'+s_id+'/')
        else:
            return HttpResponse("error")

    else:
        form = PersonForm({ 'name': p.name, 'title': p.title, 'photo': p.photo, 'order': p.order })
        return render_to_response('auth/edit-form.html', { 'form': form }, context_instance=RequestContext(request))

    return HttpResponseRedirect('/section/'+s_id+'/')

但是,照片文件路径为空白。我不希望用户每次编辑时都必须上传新文件,如果他们不想更改图像的话。如何让文件上传字段显示为预先填充,如果不更改,则不会覆盖自身?感谢。

1 个答案:

答案 0 :(得分:2)

信不信由你,可以完成!但是,它需要使用名为django-file-resubmit

的自定义django应用程序

请注意,指定的应用仅适用于管理员中的小部件,需要使用sorl-thumbnail

您可能更喜欢使用我的前叉:

https://github.com/JordanReiter/django-file-resubmit

这是一个通用版本,可以在任何地方使用ModelForm,但没有任何其他先决条件。

它非常酷,因为它会在提交时自动存储文件(即使存在验证错误),并在窗体中呈现窗口小部件时从缓存中检索它。

这实际上就是你要做的所有事情:

import file_resubmit.widgets

class PersonForm:
    """ existing code here """
    photo = forms.ImageField(required=False, widget=file_resubmit.widgets.ResubmitImageWidget())