我有一个模型表单,我的视图会生成一个用于编辑内容的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+'/')
但是,照片文件路径为空白。我不希望用户每次编辑时都必须上传新文件,如果他们不想更改图像的话。如何让文件上传字段显示为预先填充,如果不更改,则不会覆盖自身?感谢。
答案 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())