Django Autocomplete Light не работает при обновлении Django с Django 3.1 до 4.1
Приложение, которое я унаследовал, было на Django 2.2. Я постепенно обновился до 4.1 и все работает, кроме Django Autocomplete Light fields. Для некоторых форм.ModelForm у меня есть поле с правильным списком, который можно выбрать, но нет возможности набрать первые несколько букв и выбрать из этого отфильтрованного списка. Большинство полей автозаполнения находятся на forms.Form и либо отображают выпадающее поле, где единственный выбор - '-----', либо полосу прокрутки без списка, либо поле размером 2 x 47 пикселей.
Я просмотрел документацию DAL, но не смог найти решение. Я искал здесь и в других поисковых системах Google, но не нашел решения.
Я понимаю, что некоторые части кода используют старый шаблон URL, который включает ^, $ и ?P< элементы. Я пытался изменить их для одного из приложений, но это не решило проблему.
forms.py
# Forms
from django import forms
from django.forms import ModelForm
# Models
from login.models import User
from .models import Suggestion, SuggestionDecision, Implementation
# Autocomplete
from dal import autocomplete
class ReviewForm(forms.ModelForm):
class Meta:
model = Suggestion
fields = ['suggestion', 'supervisors', 'managers']
widgets = {
'supervisors': autocomplete.ModelSelect2Multiple(url='login:user_autocomplete'),
'managers': autocomplete.ModelSelect2Multiple(url='login:user_autocomplete')
}
urls.py
from django.urls import path, re_path
from process_improvement import views as pi_views
app_name='process_improvement'
re_path(r'^autocomplete/suggestion/$', pi_views.SuggestionAutocomplete.as_view(), name='suggestion_autocomplete')
views.py
from dal import autocomplete
from django.urls import reverse
from django.shortcuts import redirect
from django.contrib.auth.mixins import LoginRequiredMixin
class SuggestionAutocomplete(autocomplete.Select2QuerySetView, LoginRequiredMixin):
def get_queryset(self):
qs = Suggestion.objects.all()
if self.q:
for term in self.q.split():
qs = qs.filter(Q(suggestion__icontains=term) | Q(pk__icontains=term) | Q(created_at__icontains=term))
return qs
suggestion.html
<form method="POST" class="needs-validation" id="suggestionForm" data-parsley-validate>
{% csrf_token %}
<label for="id_supervisors">Supervisors*</label>
{{ suggestionForm.supervisors }}
{{ suggestionForm.suggestion | as_crispy_field }}
</form>
Это код для полей, которые появляются со списком, которые можно выбрать, но нет возможности ввести первые несколько букв имени. Что мне нужно изменить, чтобы это работало правильно?