我正在研究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代码只需要这个搜索的逻辑。搜索应该像我输入问题一样,只应根据问题进行过滤,但如果我使用问题,状态和创建的文件进行搜索,则应对所有这三个关键字应用过滤器。
答案 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')
答案 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)