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

问题描述:

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

如何将原始图像数据从图片对象传递到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)) 

我觉得这个线程应该给你一个线索如何使只读现有油田: In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?

我要完全隐藏画面,并为你的模型定义需要跨越验证错误绊倒,因为该领域被标记(blank=True)另一个选项是覆盖表单的保存方法并调整该字段的必需属性。

这些方针的东西:

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

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

我想我不知道如何只是在原来的问题发表评论,但你是什么意思验证?如果您只是需要确保图片对象的图片在表单完成后实际上是相同的,那么您不能为表单创建一些自定义的清除方法?在一个干净的方法中,你可以比较所有的元数据和图像,然后进行表单保存。

+0

现在的形式没有在照片字段中的图像文件。所以当函数命中“form = PictureForm(request.POST或None,request.FILES或None,instance = picture)”时,它会失败。这张照片是表格所必需的。我不确定一个干净的方法会做我需要的 - 但我可能是错的。 – Emile 2011-03-22 16:40:21

+0

你可以发布错误吗?如果由于图片为None而导致失败,则应在实例化表单之前对其进行测试。你也可以尝试使用已知的id而不是picture_id变量来确保传递正确的数据。 – grantk 2011-03-22 16:47:23

+0

“photo这个字段是必填项。”哪个是对的。因为我试图保持图像相同,所以我不希望用户将新图像上传到图片对象。我认为我应该将旧图像传入“”form = PictureForm(request.POST或None,request.FILES或None,instance = picture)“”我认为instance = picture会起作用,但事实并非如此。 – Emile 2011-03-22 16:52:32