Django:点击几次提交按钮=数据库中的几个条目



我刚刚意识到,在加载表单提交按钮时,我多次非常快速地单击它。我的 POST 请求被发送了几次,这意味着我最多可以创建 10 个数据库条目,而它应该只有一个。

直到现在我才意识到这一点,想知道这是否是正常行为,或者我的观点是否有问题?

def event_detail_view(request, event, organizer):
queryset = Event.objects.filter(organizer__slug=organizer)
event = get_object_or_404(queryset, slug=event)
tickets = collect_all_tickets(event, organizer)
ReserveFormSet = formset_factory(ReserveForm, formset=BaseReserveFormSet, extra=0)
formset = ReserveFormSet(
initial=tickets,
form_kwargs={'organizer_slug': organizer}
# Example [{'ticket': "Early Bird"}, {'ticket': "Regular Ticket"},]
)
if request.method == 'POST':
formset = ReserveFormSet(
request.POST,
initial=tickets,
form_kwargs={'organizer_slug': organizer}
)
if formset.is_valid():
order_reference = unique_order_reference_generator()
#  TODO Marc: Move into function
for form in formset:
ticket_name = form.cleaned_data['ticket'].name
int_or_empty = form.cleaned_data['quantity']
qty = is_int_or_zero(int_or_empty)
if qty > 0:
obj = form.save(commit=False)
obj.ticket_name = ticket_name
obj.order_reference = order_reference
obj.save()
return redirect('organizers:index', organizer=organizer)
return render(request, 'events/event_detail.html', {'event': event, 'formset': formset})

这是正常行为,也是在线表单的常见问题。有一些解决方案可以解决此问题,但它通常是在前端完成的,而不是在您的视图中完成的。

您可能只想在单击提交按钮后将其禁用。您可以使用各种方法来执行此操作。以下是几个Javascript选项:

https://www.the-art-of-web.com/javascript/doublesubmit/

在这个答案中也有一个不错的jQuery版本:

单击一次后禁用按钮

相关内容

最新更新