Django множественный поиск в одном поле поиска html selectpicker = как изменить значение действия?

#javascript #jquery #django #search

#javascript #jquery #django #Поиск

Вопрос:

Я надеюсь, у тебя все хорошо.

У меня разные виды поиска :

#профиль поиска в пользовательском приложении ({% url ‘user:userprofile_result’ %})

 @method_decorator(login_required(login_url='/earlycooker/login/'),name="dispatch")
class UserProfileResultsView(ListView):
    model = UserProfile
    template_name = 'search_results_user.html' 
    
    def get_queryset(self): # new
        query = self.request.GET.get('q')
        object_list = UserProfile.objects.filter(
            Q(pays__icontains=query) | Q(town__icontains=query)
        )
        return object_list 
  

#поиск статьи в приложении nutriscore ({% url ‘search_results’ %})

 class SearchResultsView(ListView):
    model = Post
    template_name = 'search_results.html' 
    
    def get_queryset(self): # new
        query = self.request.GET.get('q')
        object_list = Post.objects.filter(
            Q(title__icontains=query) | Q(slug__icontains=query)
        )
        return object_list
  

Я хотел бы иметь все эти поисковые запросы в одной форме с выпадающим списком (что-то вроде этого): у кого-нибудь есть идея по этому поводу? Заранее спасибо,

             <form action="???" method="get" class="div-only-desk mr-2 my-auto w-100 order-1">
             <div class="input-group">
<div class="dropdown">
  <select class="selectpicker bouton-catego dropdown-toggle">
  <optgroup label="Nutriscore">
    <option value="{% url 'search_results_autor' %}">Autor</option>
    <option value="{% url 'search_results' %}">Nutri</option>
  </optgroup>
  <optgroup label="Cooker">
    <option value="{% url 'user:userprofile_result' %}">Find a cooker</option>
  </optgroup>
</select>
</div>
<input class="form-control border border-right-0h" name="q" type="text" placeholder="{{ q }}" aria-label="Search">
            </div>
        </form>
  

Ответ №1:

Одним из решений было бы использовать TemplateView вместо этого код, который выглядел бы следующим образом:

 class SearchResultsView(TemplateView):
    template_name = 'search_results.html' 
    
    query1 = request.GET.get('q1')
    articles = Post.objects.filter(
        Q(title__icontains=query) | Q(slug__icontains=query)
    )

    profiles = request.GET.get('q2')
    object_list = UserProfile.objects.filter(
        Q(pays__icontains=query) | Q(town__icontains=query)
    )
    
    args = {'profiles': profiles, 'articles': articles}
    return render(request, self.template_name, args)
  

Вы можете проверять наличие результатов с помощью {% if profiles %} , {% if articles %} и отображать их, только если они присутствуют, вам также придется немного изменить стиль, чтобы отобразить результаты в виде списка.

Комментарии:

1. спасибо за ваш ответ, Арун 🙂 но есть ли какой-либо способ использовать переменную в <form action=»variable» …> в связи со значением selectpicker?

2. Да, вы можете определить функцию JavaScript, которая изменяет значение этой переменной при изменении значения select (используя onchange обработчик событий при выборе).