Django:编辑功能,同时不更改图像数据

时间:2011-03-22 16:23:43

标签: python django-forms django-views

我有一个编辑功能,我希望用户能够编辑Picture对象(标签),同时保留旧图像。表单正在寻找照片但我确实希望用户能够更改图像 - 只是其他信息。

如何将图片对象中的原始图像数据传递给PictureForm,以便验证?

我的观点:

@csrf_protect
@login_required
def edit_picture(request, picture_id, template_name="picture/newuserpicture.html"):

    picture = get_object_or_404(Picture, id=picture_id)

    if request.user != picture.user:
        return HttpResponseForbidden()

    if request.method == 'POST':
        form = PictureForm(request.POST or None, request.FILES or None, instance=picture)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/picture/%d/' % picture.id )

    else:
        form = PictureForm(instance=picture) 

    data = { "picture":picture, "form":form } 

    return render_to_response(template_name,
        data,
        context_instance=RequestContext(request))

2 个答案:

答案 0 :(得分:0)

我想我不确定如何评论原始问题,但是你的意思是什么?如果您只是需要确保在完成表单后图片对象的图片实际上是相同的,您是否可以为表单制作一些自定义的清理方法?在一个干净的方法中,您可以比较所有元数据和图像,然后进入表格保存。

答案 1 :(得分:0)

我认为这个帖子应该为您提供如何使现有字段只读的线索: In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?

我想完全隐藏图片并偶然发现验证错误,因为该字段在模型定义中被标记为必需(blank=True)另一个选项是覆盖表单的save方法并调整字段的必需属性

这些方面的东西:

   def __init__(self, *args, **kwargs):
       super(PictureForm, self).__init__(*args, **kwargs)

       for key in self.fields:
           self.fields[key].required = False