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

Django更新模型时Model Form数据不显示的技术问题

Django模型更新表单问题解决

问题根源

当前视图代码在GET请求时,错误地将response.POST or None传入表单,导致表单进入绑定状态但无有效数据,因此无法显示ticket的原有内容;移除response.POST后,表单处于未绑定状态能显示数据,但POST请求时无法绑定提交的数据,导致无法完成更新。另外HTML表单标签存在闭合错误,可能影响提交逻辑。

修正后的视图代码

def update_ticket(response, ticket_title):
    ticket = get_object_or_404(TicketsModel, title=ticket_title)
    if response.method == 'POST':
        ticket_form = AddTicketsForm(response.POST, instance=ticket, assigned_by=response.user)
        if 'return' in response.POST:
            return redirect('home', type_user=response.session.get('type_user'))
        if ticket_form.is_valid():
            # 若无需修改创建时间,删除下面这行(建议保留原创建时间,新增更新时间字段)
            # ticket.ticket_creation_date = datetime.now()
            ticket_form.save()
            return redirect('home', type_user=response.session.get('type_user'))
    else:
        ticket_form = AddTicketsForm(instance=ticket, assigned_by=response.user)
    
    return render(response, "template/testapp/update_ticket.html", {'ticket_title': ticket.title, 'ticket_form': ticket_form})

关键修改说明

  • 拆分GET/POST请求处理:
    • GET请求时,仅传入instance和assigned_by,表单处于未绑定状态,自动加载ticket的现有数据填充输入框。
    • POST请求时,绑定response.POST数据与instance,验证通过后保存更新。
  • 注意:手动修改ticket_creation_date会覆盖原始创建时间,若需记录更新动作,建议在TicketsModel中新增last_updated字段并设置auto_now=True,而非修改创建时间。

修正后的HTML代码

<h2>Update Ticket</h2>
<form action="{% url 'update_ticket' ticket_title=ticket_title %}" method="post">
    {% csrf_token %}
    {{ ticket_form.as_p }}
    <button type="submit" name="save" id="regDirect">Save</button>
    <button type="submit" name="return">Return</button>
</form>

HTML修正点

将错误的自闭合标签<form/>改为正确的闭合标签</form>,避免表单提交逻辑异常。

内容的提问来源于stack exchange,提问作者Acno_Sama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:55:59