所以这就是的观点:
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/>
要在表单字段中显示当前数据,同时还能够更新数据,您应该使用
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()
方法将相应地处理更新。