当我尝试在 django 中更新模型时,模型表单数据不可见

问题描述 投票:0回答:1

所以这就是的观点:

def update_ticket(response,ticket_title):
  ticket = get_object_or_404(TicketsModel, title=ticket_title)
  ticket_form = AddTicketsForm(response.POST or None,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'))

return render(response, "template/testapp/update_ticket.html", {'ticket_title': ticket.title, 'ticket_form': ticket_form})

问题是,当我渲染表单时,我看不到输入中的数据,但是如果我删除 AddTicketsForm() 中的“response.POST”,我可以看到数据,但无法更新什么都没有

这是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/>
python django django-models django-views django-forms
1个回答
0
投票

要在表单字段中显示当前数据,同时还能够更新数据,您应该使用

request.method
属性在提交表单时有条件地包含
request.POST
,并在第一次渲染表单时排除它时间。

尝试这个视图:

def update_ticket(response, ticket_title):
    ticket = get_object_or_404(TicketsModel, title=ticket_title)
    ticket_form = AddTicketsForm(instance=ticket, assigned_by=response.user, **request.POST** if request.method == 'POST' else None)

    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'))

    return render(response, "template/testapp/update_ticket.html", {'ticket_title': ticket.title, 'ticket_form': ticket_form})

所以现在,您的

AddTicketsForm
将在提交表单时包含
request.POST
数据,并且在第一次渲染表单时不会包含
request.POST
,这样您就可以看到输入中的数据。

提交表单时,将包含

request.POST
,并且
is_valid()
方法将相应地处理更新。

© www.soinside.com 2019 - 2024. All rights reserved.