在Django中搜索表单

时间:2015-10-17 19:07:14

标签: django

我想查询我的数据库中的多个条件,例如我想要foo作者发表评论最多的特定帖子。这个查询非常简单明了,但我希望用户指定条件。这意味着我目前在我的网站上有一个类似的表单:

enter image description here

由于用户没有被迫设置每个条件,因此可能有空字段要搜索。 (例如,他没有选择英雄)。我现在可以为每个条件创建一个if语句,以检查用户是否实际提交了一个(if request.POST.get('author'))但是我认为代码太多了......

你们是如何在django中处理这些搜索表单的?任何帮助或建议都非常感谢!

2 个答案:

答案 0 :(得分:1)

过滤Django queryset。查询集是可链接的,因此您可以根据用户指定的条件应用连续过滤器。对四个条件进行if陈述似乎并不过分:

def search_view(request):
    results = Guide.objects.all()

    title = request.POST.get('title')
    if title:
        results = results.filter(title__icontains=title)

    # other conditions...

    hero = request.POST.get('hero', 'all')
    if hero != 'all':
        results = results.filter(hero=hero)

    render_to_response('search_results.html', {'results': results})

答案 1 :(得分:1)

您可以使用MODEL_NAME.objects.filter(),并提供默认值。

然后,您可以使用__将其他级别转换为关系,或运行自定义查询,例如小于,大于等等。(此处更多信息:Django Querysets

例如:

def get_hero(request):
    if request.method == 'GET':
        hero_name = request.GET.get('hero_name', 'DEFAULT_HERO')
        guide_title = request.GET.get('guide_title', 'DEFAULT_TITLE')

        heros = Hero.objects.filter(hero__name=hero_name, guide__title=guide_title) 

    return render(request, 'template.html', {'heros': heros})