Django Загрузка bootstrap-модала только после прохождения валидации формы
Пытаюсь вывести модальное окно с условиями и положениями, только когда пользователь принимает условия и положения, данные отправляются в базу данных. Я хочу подтвердить ввод пользователя до появления модального окна. Ниже приведен мой код.
individual_account.html
views.py
def individual_account(request):
if request.method == 'POST':
form = IndividualForm(request.POST)
if form.is_valid():
form.save()
fullname = form.cleaned_data['full_name']
messages.success(
request,
f'Thank You {fullname} For Creating An Account.'
)
return HttpResponseRedirect(
reverse_lazy('accounts:individual-account')
)
else:
form = IndividualForm()
return render(request, 'accounts/individual_account.html', {'form': form})
Как я могу этого добиться?
Если я правильно понял, вы просто хотите сделать запрос на пост, когда пользователь принимает всплывающий модал, вы можете использовать эту кнопку внутри вашего модала, чтобы отправить запрос на пост с помощью javascript:
<button type="button" class="btn btn-primary">Save changes</button>
let csrfToken = "{{csrf_token}}"
async function postRequest() {
let form = document.getElementById("individualForm")
let postUrl = form.action;
let data = new FormData(form)
// include your csrf token for post request in the request header
let headers = new Headers({
"X-CSRFToken": csrfToken,
});
let postResponse = await fetch(postUrl, {
method: "POST",
headers: headers,
body: data,
redirect: "follow",
});
}
и, конечно, вам нужно событие onclick для упомянутой кнопки:
<button type="button" class="btn btn-primary" onclick="postRequest()">Save changes</button>
Примечание: Вам не нужно использовать fetch api для выполнения запроса сообщения есть несколько способов сделать это в javascript я наиболее знаком с fetch так что примите это с крупицей соли я надеюсь, что это помогло.
Мне удалось решить эту проблему.
<form method="post" class="bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4" id="individualForm">
{% csrf_token %}
{% for hidden_field in form.hidden_fields %}
{{ hidden_field.errors }}
{{ hidden_field }}
{% endfor %}
<!-- Your form fields here -->
<!-- Button to trigger modal -->
<button type="submit" id="createAccountBtn" class="bg-yellow-700 text-white rounded-none hover:bg-white hover:text-blue-900 hover:border-blue-900 shadow hover:shadow-lg py-2 px-4 border border-gray-900 hover:border-transparent">
Create Account
</button>
</form>
<!-- Modal -->
<div class="modal fade" id="termsModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Terms & Conditions</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Terms & Conditions Here!!</p>
<label><input type="checkbox" id="acceptTerms"> I accept the terms and conditions</label>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" id="acceptTermsBtn" class="btn btn-primary">Accept and Create Account</button>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function () {
// Handle form submission
$('#individualForm').submit(function (event) {
event.preventDefault(); // Prevent default form submission
$('#termsModal').modal('show'); // Show terms modal
});
// Handle accept terms button click
$('#acceptTermsBtn').click(function () {
if ($('#acceptTerms').prop('checked')) {
$('#individualForm').unbind('submit').submit(); // If terms accepted, submit form
} else {
// If terms not accepted, show an alert or perform any other action
alert('Please accept the terms and conditions.');
}
});
});
</script>