Невозможно выбрать значение на промежуточной странице действия
У меня есть две модели 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 %}
Вот как отображается промежуточная страница:

Первая (но незначительная) проблема заключается в том, что поля формы отображаются в ряд, а не каждое в отдельной строке. Но давайте пока пропустим это.
Главная проблема заключается в том, что когда я выбираю группу, ничего не происходит, группа, похоже, не выбрана.
Вместо этого я вижу следующую ошибку на консоли браузера:
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 }}
Это кажется самым простым решением
Дайте мне знать, если это поможет :)