【问题标题】:Django Multiple search in one html search field + selectpicker = how to change value of action?Django 在一个 html 搜索字段中进行多项搜索 + selectpicker = 如何更改操作值?
【发布时间】:2020-08-23 11:58:10
【问题描述】:

希望你一切都好。

我有不同的搜索视图:

#search profile in user app ({% 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 

#search article in nutricore app ({% 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

...

我希望使用 Dropdown(类似的东西)以一种形式进行所有这些搜索: 有人对此有想法吗?提前致谢,

            <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>

【问题讨论】:

    标签: javascript jquery django search


    【解决方案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 %} 检查结果并仅在它们存在时才显示它们,您还必须进行一些样式设置才能将结果显示为列表。

    【讨论】:

    • 感谢您的回答 Arun :) 但是有没有办法在
      中使用与 selectpicker 的值相关的变量?
    • 是的,您可以定义一个 JavaScript 函数,该函数会在选择值更改时更改该变量的值(在选择上使用 onchange 事件处理程序)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2019-05-21
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多