从Django的模型中搜索

时间:2014-05-26 14:18:29

标签: python django django-models django-queryset

我的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 =""我想获得所有类别结果

3 个答案:

答案 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)