В настоящее время я пытаюсь реализовать модальные формы в своем приложении Django (я установил эту библиотеку: https://pypi.org/project/django-bootstrap-modal-forms/
Мой urls.py выглядит следующим образом:
from django.urls import path
from cloudapp.server_users.views import *
app_name = "server_users"
urlpatterns = [
path("", ServerUsersManagement.as_view(), name="user_management"),
path('add_user/', ServerUsersCreateView.as_view(), name='add_user')
]
Мой views.py выглядит так:
...
from django.views import generic
from bootstrap_modal_forms.generic import (BSModalCreateView,
BSModalUpdateView,
BSModalReadView,
BSModalDeleteView)
class ServerUsersManagement(LoginRequiredMixin, generic.ListView):
model = ServerUsers
context_object_name = 'server_users'
template_name = "pages/user_management.html"
queryset = ServerUsers.objects.all()
def get_context_data(self, **kwargs):
context = super(ServerUsersManagement, self).get_context_data(**kwargs)
context['email_aliases'] = EmailAliases.objects.all()
return context
# Create User
class ServerUsersCreateView(LoginRequiredMixin,BSModalCreateView):
template_name = 'server_users/add_user.html'
form_class = ServerUsersForm
success_message = 'Success: User was created.'
success_url = reverse_lazy('server_users:user_management')
def form_valid(self, form, **kwargs):
username = form.cleaned_data['username']
company_id = str(self.request.user.id)
final_path = server_users_logic.create_path(settings.VPN_BUNDLE_PATH, company_id, username)
form.instance.vpn_certificate = final_path
#company_id FK in the company table
form.instance.company_id = self.request.user.id
return super().form_valid(form)
Мои модели.py:
from django.db import models
from cloudapp.users.models import Company
class ServerUsers(models.Model):
given_name = models.CharField(max_length=30)
family_name = models.CharField(max_length=30)
cloud_email = models.EmailField(max_length=254)
date_of_registration = models.DateField(auto_now=False, auto_now_add=True)
username = models.CharField(max_length=30)
vpn_certificate = models.FileField(max_length=100, blank=True, default="OK")
user_changed_password = models.BooleanField(blank=True, default=False)
password = models.CharField(max_length=100, default="some_password")
company = models.ForeignKey('users.Company', on_delete=models.CASCADE)
Моя HTML часть выглядит следующим образом: user_management. html
{% extends "pages/base.html" %} {% block title %}{% block head_title %}{% endblock head_title %}{% endblock title %} {% block content %} {% include "_modal.html" %}
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">User Management</h1>
<button class="add_user d-none d-sm-inline-block btn btn-md btn-success shadow-sm" name="button">
<span class="fa fa-plus mr-2"></span>Add New User
</button>
</div>
<script type="text/javascript">
$(function() {
// Add User Button
$(".add_user").modalForm({
formURL: "/user_management/add_user/",
modalID: "#create-modal"
});
});
</script>
...
_modal. html
<div class="modal fade" id="create-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
</div>
</div>
</div>
<div class="modal fade" tabindex="-1" role="dialog" id="modal">
<div class="modal-dialog" role="document">
<div class="modal-content"></div>
</div>
</div>
и форма, которую я хотел бы отобразить в форме:
{% load widget_tweaks %}
<form method="post" action="">
{% csrf_token %}
<div class="modal-header">
<h3 class="modal-title">Add Email Alias</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="{% if form.non_field_errors %}invalid{% endif %} mb-2">
{% for error in form.non_field_errors %}
{{ error }}
{% endfor %}
</div>
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{% render_field field class="form-control" placeholder=field.label %}
<div class="{% if field.errors %} invalid{% endif %}">
{% for error in field.errors %}
<p class="help-block">{{ error }}</p>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
<div class="modal-footer">
<button type="button" class="submit-btn btn btn-primary">Add</button>
</div>
</form>
Модальный корректно открывается из базы (user_management. html), корректно обрабатывает ввод и добавляет записи в БД, но проблема в том, что он всегда перенаправляет на / user_management / add_user вместо /user_management.
модальный выглядит так:
И после успешной отправки он перенаправляет пользователя в add_user. html
В логах я вижу это (при запуске приложения из CHROME / FIREFOX) - кажется, работает правильно, но потом я вижу много постов
Журналы, когда я запускаю приложение в Safari:
Абсолютно странно то, что в Safari он всегда работает правильно, в Chrome & Firefox он никогда не работает.
У кого-нибудь есть подсказки?
Спасибо большое! Северин