我有一个搜索框,我可以用来搜索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})
答案 0 :(得分:0)
我认为你误解了how lookups with Q objects work。
假设您要按
过滤OrderItem
个对象
q
certification_type
来自选择标记 x
您可以执行以下操作:
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)
)