在Django中搜索几个字段.不知道怎么把它们锁起来



我有几个字段,我希望用户在我的网站上寻找餐馆时进行搜索;cuisine_style (m2m), neighborhoods (m2m), event_space (m2m).

以下拉框的形式呈现给用户。此外,我还想提供一个文本字段,用户可以在其中键入任何内容,并对餐馆name (CharField)和keywords (CharField)进行搜索。

我可以写一个视图来显示应用其中一个过滤器的结果,但不是所有的。哦,每个下拉菜单显然都有一个空/空的默认值。

任何想法?下面是我要开始的内容:

from django.db.models import Q
if request.GET.get('q'):
    search_terms = request.GET.get('q')
    restaurant_list = Restaurant.objects.filter(
        Q(name__icontains=search_terms) |
        Q(keywords__icontains=search_terms) |
    ).order_by('-user__date_joined')

,但它只覆盖一个字段。那么所有的下拉菜单呢?

哦(!)我想我可以编译所有的GET参数并将它们拆分并转储到一个列表中,但并非所有值都是单个单词。

我也对Haystack开放,但我不知道。

使用post和字段模型表单,您可以准备一个Q列表(在示例中名为qs),其中包含已发布的值:

from django.db.models import Q
if request.method == 'POST':
    qs = []
    if form.is_valid():
       cuisine_styles = form.cleaned_data['cuisine_style']
       neighborhoods  = form.cleaned_data['neighborhoods']
       search_terms = form.cleaned_data['search_terms']
       if cuisine_styles: qs.append( Q( cuisine_style__in = cuisine_styles ) )
       if neighborhoods: qs.append( Q(neighborhoods__in = neighborhoods ) )
       for s in search_terms.split(' '):
           qs.append(  Q( name__icontains=s) )
           qs.append(  Q( keywords__icontains=s) )
       f = None
       for q in qs:
           if f is None: f = q
           else: f |=q
        restaurant_list = Restaurant.objects.filter( f ).order_by('-user__date_joined')
        #show results ....
else:
    #show form ....

我假设你的下拉框是ModelMultipleChoiceField

相关内容

最新更新