#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
обработчик событий при выборе).