一个搜索框,其中包含与所选django特定项目相关的选项

时间:2016-02-04 09:34:58

标签: python django

我有一个搜索框,我可以用来搜索django数据库中的项目,并将结果作为表格打印出模板。

目前代码正在运行,但我打算自定义搜索,以容纳一个select标签,这样无论用户输入和选择的是什么,都应查询数据库并获取结果或结果。

我试过但它不起作用

q是从文本输入获得的,而x是从select标签

获得的

这是我的代码:

def search_form(request):

    data = OrderItem.objects.order_by().values_list('certification_type', flat=True).distinct()
    print data

    if 'q' in request.GET and request.GET['q']:
        q = request.GET['q']

        print q

        x = request.GET['certification_type']
        print x

        items = OrderItem.objects.filter(Q(order_type__iexact=x and order_type__iexact=q) | Q(certification_type__iexact=x and certification_type__iexact=q) | Q(item__iexact=x and item__iexact=q)
         | Q(certification_no__iexact=x and certification_no__iexact=q) | Q(client__user__email__iexact=x and client__user__email__iexact=q) | Q(client__phone_number__iexact=x and client__phone_number__iexact=q)
         | Q(created_on__icontains=x and created_on__icontains=q))




        for x in items:
            for q in items:
                print items


        return render(request, 'i/search_results.html', {'items':items, 'q_query':q, 'x_query':x})
    else:
        return render(request, 'i/search_form.html', {'error':True,  "data":data})

1 个答案:

答案 0 :(得分:0)

我认为你误解了how lookups with Q objects work

假设您要按

过滤OrderItem个对象
  1. 在任何属性
  2. 中出现搜索字符串 q
  3. certification_type来自选择标记 x
  4. 您可以执行以下操作:

    items = OrderItem.objects.filter(
        certification_type=x,
        Q(order_type__iexact=q) |
        Q(item__iexact=q) |
        Q(certification_no__iexact=q) |
        Q(client__user__email__iexact=q) |
        Q(client__phone_number__iexact=q) |
        Q(created_on__icontains=q)
    )