我有一个编辑功能,我希望用户能够编辑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))
答案 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