使用ajax在django中进行多列搜索

时间:2016-09-10 09:08:33

标签: python django

我正在研究django项目中的列表。场景是,当我点击常见问题列表页面时,它会将我重定向到我获得所有常见问题的列表。现在我必须使用不同的关键字进行搜索。共有五个关键字,我可以通过它搜索特定结果。代码是

questions = Help.objects.all().filter().values('id','question','description','status','created','modified').order_by('-id')
if 'question' in ajax_data:
    #add filter for question
if 'description' in ajax_data:
    #add filter for description
if 'status' in ajax_data:
    #add filter for status
if 'created' in ajax_data:
    #add filter for created
if 'modified' in ajax_data:
    #add filter for modified
questions = Help.objects.all().filter(#add all conditions here dynamically after applying filters).values('id','question','description','status','created','modified').order_by('-id')

首先,当页面刷新它执行第一个返回所有数据的查询时,现在使用ajax过滤器必须应用,我已经完成了所有ajax代码只需要这个搜索的逻辑。搜索应该像我输入问题一样,只应根据问题进行过滤,但如果我使用问题,状态和创建的文件进行搜索,则应对所有这三个关键字应用过滤器。

2 个答案:

答案 0 :(得分:3)

questions = Help.objects.all()
filters = {}
if 'question' in ajax_data:
    filters['question'] = ajax_data.get('question')
if 'description' in ajax_data:
    filters['description'] = ajax_data.get('description')
if 'status' in ajax_data:
    filters['status'] = ajax_data.get('status')
if 'created' in ajax_data:
    filters['created'] = ajax_data.get('created')
if 'modified' in ajax_data:
    filters['modified'] = ajax_data.get('modified')
questions = questions.filter(**filters).values('id','question','description','status','created','modified').order_by('-id')

点击此链接https://docs.python.org/3/glossary.html#term-argument

答案 1 :(得分:0)

您可以使用request.GET.get('filter_name')

例如,如果您按标题过滤:

query = Model.objects.all()
title = request.GET.get('title')    
if title:
    query = query.filter(title__icontains=title)

...and so on

请注意,您的网址应包含http://myurl.com/?title=abc

等获取参数

修改     对于一个查询过滤器,您可以使用Q

中的django.db.models对象
filter = Q()
if title:
    filter &= Q(title__icontains=title)
if category:
    filter &= Q(category__icontains=category)
query = query.filter(filter)