Django ModalForm Неверное перенаправление - PullRequest
0 голосов
/ 29 апреля 2020

В настоящее время я пытаюсь реализовать модальные формы в своем приложении 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">&times;</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.

модальный выглядит так:

enter image description here

И после успешной отправки он перенаправляет пользователя в add_user. html

enter image description here

В логах я вижу это (при запуске приложения из CHROME / FIREFOX) - кажется, работает правильно, но потом я вижу много постов

enter image description here

Журналы, когда я запускаю приложение в Safari: enter image description here

Абсолютно странно то, что в Safari он всегда работает правильно, в Chrome & Firefox он никогда не работает.

У кого-нибудь есть подсказки?

Спасибо большое! Северин

...