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
答
我想我不知道如何只是在原来的问题发表评论,但你是什么意思验证?如果您只是需要确保图片对象的图片在表单完成后实际上是相同的,那么您不能为表单创建一些自定义的清除方法?在一个干净的方法中,你可以比较所有的元数据和图像,然后进行表单保存。
现在的形式没有在照片字段中的图像文件。所以当函数命中“form = PictureForm(request.POST或None,request.FILES或None,instance = picture)”时,它会失败。这张照片是表格所必需的。我不确定一个干净的方法会做我需要的 - 但我可能是错的。 – Emile 2011-03-22 16:40:21
你可以发布错误吗?如果由于图片为None而导致失败,则应在实例化表单之前对其进行测试。你也可以尝试使用已知的id而不是picture_id变量来确保传递正确的数据。 – grantk 2011-03-22 16:47:23
“photo这个字段是必填项。”哪个是对的。因为我试图保持图像相同,所以我不希望用户将新图像上传到图片对象。我认为我应该将旧图像传入“”form = PictureForm(request.POST或None,request.FILES或None,instance = picture)“”我认为instance = picture会起作用,但事实并非如此。 – Emile 2011-03-22 16:52:32