我正在按照以下指示进行操作django-bootstrap-modal-forms django-bootstrap-modal-forms https://pypi.org/project/django-bootstrap-modal-forms/我发现当我提交表单时,我的表单被发布或提交了两次。首先,该对象只是被创建了两次,我可以从管理员那里看到这一点。现在看来表单正在创建对象,但也进入其验证状态,如果表单成功(事实确实如此),我显然不希望出现这种状态。
有人经历过这个吗?除了我链接到的文档中概述的内容之外,我什么也没做,而且我无法确定为什么应该提交两次。
这是我的代码:
首页.html
<a href="#" class="create-shipment dropdown-itemcreatenew" onclick="closeNav()">Shipment</a>
<div class="modal fade" tabindex="-1" role="dialog" id="modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
</div>
</div>
</div>
<script>
$(document).ready(function() {
$(".create-shipment").modalForm({
formURL: "{% url 'CreateShipmentView' %}"
});
});
</script>
views.py
class CreateShipmentView(BSModalCreateView):
template_name = 'create_shipment.html'
form_class = CreateShipmentForm
success_message = 'Success: Shipment Has Been Created!'
success_url = reverse_lazy('HomeView')
create_shipment.html(模态表单模板)
{% load crispy_forms_tags %}
<form method="post" action="">
{% csrf_token %}
<div class="modal-header">
<h5 class="modal-title">Create New Shipment</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
{{form|crispy}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="submit-btn btn btn-primary">Create</button>
</div>
</form>
forms.py
class CreateShipmentForm(BSModalForm):
class Meta:
model = Shipment
fields = ['Reference_Number', 'Ultimate_Consignee']
urls.py
url(r'^create_shipment/', views.CreateShipmentView.as_view(), name='CreateShipmentView'),
提交按钮上的事件侦听器
// Add click listener to the submitBtn
var ajaxSubmit = function (modalID, modalContent, modalForm, formURL, errorClass, submitBtn) {
$(submitBtn).on("click", function () {
// Check if form.is_valid() via ajax request when submitBtn is clicked
isFormValid(modalID, modalContent, modalForm, formURL, errorClass, submitBtn, submitForm);
});
};
// Check if form.is_valid() & either show errors or submit it
var isFormValid = function (modalID, modalContent, modalForm, formURL, errorClass, submitBtn, callback) {
$.ajax({
type: $(modalForm).attr("method"),
url: $(modalForm).attr("action"),
// Serialize form data
data: $(modalForm).serialize(),
success: function (response) {
if ($(response).find(errorClass).length > 0) {
// Form is not valid, update it with errors
$(modalID).find(modalContent).html(response);
$(modalForm).attr("action", formURL);
// Reinstantiate click listener on submitBtn
ajaxSubmit(modalID, modalContent, modalForm, formURL, errorClass, submitBtn);
} else {
// Form is valid, submit it
callback(modalForm);
}
}
});
};