Editpost函数失效,request.method=='POST'判断存在问题求助
问题分析与解决方案
首先看你的代码,核心问题出在视图函数的逻辑顺序上:当用户是帖子作者时,你直接返回了表单,完全不管当前请求是GET还是POST,导致后面的if request.method=='POST':代码块永远不会被执行!
1. 修复视图函数的逻辑错误
你当前的代码结构完全搞反了权限检查和请求处理的顺序,导致POST请求根本得不到处理。调整后的代码应该先检查用户权限,再在权限范围内处理GET/POST请求:
@login_required def TestimonyEdit(request, id=None): instance = get_object_or_404(Testimony, id=id) # 先做权限校验,无权限直接返回提示 if instance.user != request.user: return HttpResponse('You are unauthorized to edit this post') # 有权限的情况下,分别处理POST和GET请求 if request.method == 'POST': form = TestimonyForm(request.POST, request.FILES, instance=instance) if form.is_valid(): print('3') instance = form.save(commit=False) instance.save() print('2') # 注意:你之前用了未定义的变量testimony,应该用instance context = {"testimony": instance} return render(request, 'testimony_post.html', context) else: # GET请求时,展示编辑表单 form = TestimonyForm(instance=instance) return render(request, 'variablized_form.html', {"form": form})
2. 解决图片404的问题
从错误日志看,系统一直在请求/testimonypost/.jpg这类空路径的图片,原因是:
- 表单的图片字段(ImageField)当前没有值,但模板里直接渲染了图片URL,没有判断图片是否存在
如果你的模板里有显示现有图片的逻辑,需要加上判断:
{% if form.image.value %} <img src="{{ form.image.value.url }}" alt="Testimony Image"> {% endif %}
(把image换成你实际定义的图片字段名)
另外,你的模板代码里还有个小语法错误:{{field.label_tag}}前面少了空格,修正后:
<label class="control-label col-sm-2">{{field.label_tag}}</label>
为什么之前的POST请求没生效?
当作者用户提交POST请求时,第一个if instance.user == request.user:条件满足,代码直接执行return render(...)返回了表单页面,根本没走到后面的POST处理逻辑,所以表单数据永远不会被保存。
内容的提问来源于stack exchange,提问作者HAN YAO FOONG
相关产品推荐
相关产品推荐

