我的view.py就像这样
def searchnews(request):
name = request.GET.get('name', 'default')
categry = request.GET.get('category', 'default')
NewTable.objects.filter(headline__contains=name).filter(category=categry)
我想要的是当querystring中任何元素的值为空时 喜欢 如果category =""我想获得所有类别结果
答案 0 :(得分:3)
您可以在Django中使用chain filters的功能。
如果在request.GET
中找不到,则将默认值设置为空字符串。在添加其他filter()
之前检查是否空虚:
category = request.GET.get('category', '')
results = NewTable.objects.filter(headline__contains=name)
if category:
results = results.filter(category=category)
答案 1 :(得分:1)
另一种选择是将过滤器构建为kwargs字典
kwargs = {'headline__contains': name}
if 'category' in request.GET and request.GET['cateogry'] is not '':
kwargs['category': request.GET['category']
queryset = NewTable.objects.filter(**kwargs)
答案 2 :(得分:0)
只有在提供类别的情况下,您才可以申请filter
:
categry = request.GET.get('category', '')
queryset = NewTable.objects.filter(headline__contains=name)
if categry:
queryset = queryset.filter(category=categry)