Невозможно выбрать значение на промежуточной странице действия

У меня есть две модели User и Group.
Я реализую действие "Change Groups" в UsersAdmin, которое перенаправляет на промежуточную страницу с 2 полями MultipleChoiceFields для Groups, которые я хочу использовать либо для удаления пользователей из определенных групп, либо для добавления пользователей в другие группы, либо для обоих действий одним махом (т.е. перемещения).
. В документации очень мало информации на эту тему, поэтому для того, чтобы сделать это, я следую этой статье .

Вот моя форма:

class ChangeUsersGroupsForm(forms.Form):
    _selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
    from_groups = forms.ModelMultipleChoiceField(Group.objects, required=False)
    to_groups = forms.ModelMultipleChoiceField(Group.objects, required=False)

Мое действие администратора:

def change_groups_action(self, request, queryset):
    if 'apply' in request.POST:
        from_groups = request.POST["from_groups"]
        to_groups = request.POST["to_groups"]

        from_groups_qs = Group.objects.filter(pk__in=from_groups).all()
        to_groups_qs = Group.objects.filter(pk__in=to_groups).all()
        user_ids = [u.user_id for u in queryset]

        # task that will do the job of actually moving the users
        change_users_groups.delay(from_groups_qs, to_groups_qs)

        self.message_user(request, "Changed groups of %s users" % len(user_ids))

        return HttpResponseRedirect(request.get_full_path())

    form = ChangeUsersGroupsForm(initial={'_selected_action': queryset.values_list('id', flat=True)})

    return render(request, "admin/change_users_groups.html", {'queryset': queryset, 'form': form})
change_groups_action.short_description = "Change Groups"

Вот мой шаблон:

<!-- users/templates/admin/change_users_groups.html -->

{% extends "admin/base_site.html" %} {% block content %}
<form action="" method="post">
  {% csrf_token %}
  {{ form }}
  <br />
  <br />
  <p>The Group changes will be applied to the following users:</p>
  <ul>
    {{ queryset|unordered_list }}
  </ul>
  <input type="hidden" name="action" value="change_groups_action" />
  <input type="submit" name="apply" value="Confirm" />
</form>
{% endblock %}

Вот как отображается промежуточная страница: intermediate page form

Первая (но незначительная) проблема заключается в том, что поля формы отображаются в ряд, а не каждое в отдельной строке. Но давайте пока пропустим это.

Главная проблема заключается в том, что когда я выбираю группу, ничего не происходит, группа, похоже, не выбрана.
Вместо этого я вижу следующую ошибку на консоли браузера:

Uncaught TypeError: django.jQuery is not a function

Эта ошибка выводится каждый раз, когда я нажимаю на опцию.

Кто-нибудь знает, что происходит?


Django 2.2
Python 3.8.10

У меня уже была такая проблема, но в другой ситуации (не связанной с Django admin). Почти всегда оказывалось, что JQuery не загружен или загружен слишком поздно в шаблоне.

Согласно [этому ответу], вы должны загрузить его в шаблон напрямую.

<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>

Что касается вашей формы поля формы. Я предлагаю визуализировать каждое поле отдельно, например, так:

{{ form.from_groups }}
<br/>
{{ form.to_groups }}

Это кажется самым простым решением

Дайте мне знать, если это поможет :)

Вернуться на верх