如何在Django过滤器中合并任何字段

问题描述 投票:0回答:1

我想知道如何将多个字段中的搜索合并为一个。字段为textoQuestao, perguntaQuestao, aOpcao, bOpcao, cOpcao, eOpcao, eOpcao

我希望将所有这些字段组合成一个称为texto并搜索所有选定的字段。

filters.py

class FiltroQuestoes(django_filters.FilterSet):
    texto = 
    class Meta:
        model = Questao
        fields = ['textoQuestao','perguntaQuestao','aOpcao','bOpcao','cOpcao','dOpcao','eOpcao','idProva','idQuestao','idCategoria']

views.py

def FiltroDeQuestoesView(request):
    qs = filter(request)
    context = {
        'queryset': qs,
        'categorias': Categoria.objects.all(),
        'provas': Prova.objects.all()
    }
    return render(request, "polls/pesquisa.html", context)


def filter(request):
    qs = Questao.objects.all()
    categorias = Categoria.objects.all()
    prova = request.GET.get('prova')
    provas = Prova.objects.all()
    questao = request.GET.get('questao')
    categoria = request.GET.get('categoria')
    return qs

search.html

{% block content %}
  <form method="get">
    <div class="well">
      <h4 style="margin-top: 0">Filter</h4>
      <div class="row">
        <div class="form-group col-sm-4 col-md-3">
          {{ filter.form.texto.label_tag }}
          {% render_field filter.form.texto class="form-control" %}
        </div>
        <div class="form-group col-sm-4 col-md-3">
          {{ filter.form.idProva.label_tag }}
          {% render_field filter.form.idProva class="form-control" %}
        </div>
        <div class="form-group col-sm-4 col-md-3">
          {{ filter.form.idQuestao.label_tag }}
          {% render_field filter.form.idQuestao class="form-control" %}
        </div>
        <div class="form-group col-sm-4 col-md-3">
          {{ filter.form.idCategoria.label_tag }}
          {% render_field filter.form.idCategoria class="form-control" %}
        </div>
      <button type="submit" class="btn btn-primary">
        <span class="glyphicon glyphicon-search"></span> Search
      </button>
    </div>
  </form>
{% endblock %}
django django-filter
1个回答
0
投票

我建议您为此使用弹性搜索。

但是您可以使用Django Q对象进行OR查询

qs = Questao.objects.filter(Q(textoQuestao__icontains=query_string)| Q(perguntaQuestao__icontains=query_string)|...
© www.soinside.com 2019 - 2024. All rights reserved.