python - django 表单没有发布,但页面上的其他表单呢?
问题描述
我在一个页面上有两个表格。第一个表单正确地向我的视图发送了一个 POST 请求,但第二个表单发送了一个 GET(我还需要它来发送一个 POST)。我以前犯过这个错误,这次我确保按钮设置为“提交”,但由于某种原因它仍然发送一个 GET。
表格 1(按预期工作):
<form method="POST">
{% csrf_token %}
<div class="row form-row">
<div class="col-sm-6">
<div class="form-group">
<label for="start_date">Start</label>
<input class="form-control" type="text" data-flatpickr data-alt-input="true" data-date-format="Y-m-d" name="start_date" data-enable-time="true">
</div>
<div class="form-group">
<label for="end_date">End</label>
<input class="form-control" type="text" data-flatpickr data-alt-input="true" data-date-format="Y-m-d" name="end_date" data-enable-time="true">
</div>
</div>
</div>
<input type="hidden" name="eventtype" value="availability">
<button class="btn btn-primary" type="submit">Save changes</button>
</form>
表格 2(发送一个 GET 但我希望这个 POST):
<form method="POST">
{% csrf_token %}
{% if form.errors %}{{form.errors}}{% endif %}
<input type="hidden" name="pk" value="{{ i.id }}">
<input type="hidden" name="eventtype" value="invite">
<button class="btn btn-primary" type="submit">Confirm</button>
</form>
视图.py
def createevent(request):
if request.method == 'GET':
<<code>>
else:
try:
eventtype = request.POST.get('eventtype', None)
print(eventtype)
if eventtype == "availability":
form = EventForm(request.POST)
newEvent = form.save(commit=False)
newEvent.mentor_user = request.user
newEvent.requester_user = None
newEvent.notes = None
newEvent.save()
elif eventtype == "invite":
form = EventForm(request.POST)
updatedEvent = form.save(commit=False)
updatedEvent.isConfirmed = True
updatedEvent.save()
return redirect('createevent')
except ValueError:
print(form.errors)
return render(request, 'events/createevent.html', {'form':EventForm(), 'error':'There was an error. Please make sure you entered everything correctly!'})
网址.py
# Events
path('events/create', views.createevent, name='createevent'),
# path('calendar/<slug:slug>', views.viewevent, name='viewevent'),
path('events/<int:pk>/edit', views.updateevent, name='updateevent'),
表格 1 和表格 2 的控制台输出:
"GET /events/create?csrfmiddlewaretoken=<<redacted>>&pk=2&eventtype=invite HTTP/1.1" 200 25560
"POST /events/create?csrfmiddlewaretoken=<<redacted>>&pk=2&eventtype=invite HTTP/1.1" 302 0
解决方案
问题最终是表单被包装在模板代码中的另一个表单标记中。当我单击提交按钮时,提交按钮在第一个表单而不是第二个表单上触发。只是一个糟糕的复制/粘贴。
推荐阅读
- mongodb - Mongoose Model.UpdateMany 不是 pre hook 上的函数错误,这适用于类似的模式和解析器
- c - 在树中搜索数字
- javascript - 从对象初始化 Typescript 类的最佳实践 (Object.assign)
- r - 使用列表时将国家假期添加到先知模型
- ios - 在 iOS 应用程序中创建帐户原型时遇到问题
- python - 如何使包含 Tkinter Checkboxes 的循环适用于调用函数中复选框的每个不同实例?
- php - 我需要帮助来解决嵌套的 FORM 问题
- php - 在 WooCommerce 电子邮件模板上使用的简码中传递订单 ID
- javascript - React 和 React Native 之间的代码共享
- excel - 将工作表作为附件发送到工作簿中指定的电子邮件地址列表