You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:47:21