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
Вернуться на верх