Django Select2 Autocomplete: Как передать дополнительный параметр (argId) в представление?
Я использую Django с django-autocomplete-light и Select2 для создания поля автозаполнения. Поле Select2 динамически добавляется на страницу при выборе другого поля. Оно получает данные из представления Django autocomplete, и все работает нормально.
Теперь мне нужно отфильтровать набор запросов в моем представлении автозаполнения на основе дополнительного параметра (argId). Однако я не уверен, как правильно передать этот параметр.
JavaScript (Инициализация Select2)
function getElement(argId) {
let elementSelect = $("<select></select>");
let elementDiv = $(`<div id='element_id' style='text-align: center'></div>`);
elementDiv.append(elementSelect);
$(elementSelect).select2({
ajax: {
url: "/myautocomplete/class",
data: function (params) {
return {
q: params.term, // Search term
arg_id: argId // Pass extra parameter
};
},
processResults: function (data) {
return {
results: data.results // Ensure correct format
};
}
},
placeholder: "Element...",
minimumInputLength: 3
});
return elementDiv;
}
Django Autocomplete View
class ElementAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
def get_queryset(self):
qs = MyModel.objects.filter(...)
Я хочу передавать argId из JavaScript в представление Django, чтобы набор запросов фильтровался соответствующим образом. Однако я не уверен в правильности своего подхода и в том, как этого добиться.
Будем благодарны за любые предложения и улучшения. Спасибо!
Просто передайте их в качестве параметров запроса
/myautocomplete/class?title=title_1
и вы можете поймать их в классе
class ElementAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
def get_queryset(self):
title = self.request.GET.get("title")
qs = MyModel.objects.all()
if title is not None:
qs.filter(title__icontains=title)
Отфильтруйте с помощью:
class ElementAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
def get_queryset(self, *args, **kwargs):
qs = super().get_queryset(*args, **kwargs)
_arg_id = self.request.GET.get('arg_id'):
if _arg_id is not None:
qs = qs.filter(some_field=_arg_id)
return qs