示例#1
0
def search(request):
    query_string = ''
    found_entries = {}
    object_list = []

    if ('q' in request.GET) and request.GET['q'].strip():
        query_string = request.GET['q']
        form = SearchForm(initial={'q':query_string})
        
        terms = normalize_query(query_string)
        
        for model, data in search_list.items():
            query = get_query(terms, data['fields'])            

            results = model.objects.filter(query)
            if results:
                found_entries[data['text']] = results
                for result in results:
                    object_list.append(result)
    else:
        form = SearchForm()

    return render_to_response('search_results.html', {
                            'query_string':query_string, 
                            'found_entries':found_entries,
                            'form':form,
                            'object_list':object_list,
                            'form_title':_(u'Search'),
                            'extra_columns':[{'name':_(u'type'), 'attribute':lambda x:x._meta.verbose_name[0].upper() + x._meta.verbose_name[1:]}],
                            'title':_(u'results with: %s') % query_string
                            },
                          context_instance=RequestContext(request))
示例#2
0
def search(request):
    query_string = ''
    found_entries = {}
    object_list = []

    if ('q' in request.GET) and request.GET['q'].strip():
        query_string = request.GET['q']
        form = SearchForm(initial={'q': query_string})

        terms = normalize_query(query_string)

        for model, data in search_list.items():
            query = get_query(terms, data['fields'])

            results = model.objects.filter(query)
            if results:
                found_entries[data['text']] = results
                for result in results:
                    object_list.append(result)
    else:
        form = SearchForm()

    return render_to_response('search_results.html', {
        'query_string':
        query_string,
        'found_entries':
        found_entries,
        'form':
        form,
        'object_list':
        object_list,
        'form_title':
        _(u'Search'),
        'extra_columns': [{
            'name':
            _(u'type'),
            'attribute':
            lambda x: x._meta.verbose_name[0].upper() + x._meta.verbose_name[1:
                                                                             ]
        }],
        'title':
        _(u'results with: %s') % query_string
    },
                              context_instance=RequestContext(request))
示例#3
0
文件: views.py 项目: coulix/mayan
def search(request):
    query_string = ''
    found_entries = {}
    object_list = []

    start_time = datetime.datetime.now()
    result_count = 0
    if ('q' in request.GET) and request.GET['q'].strip():
        query_string = request.GET['q']
        form = SearchForm(initial={'q':query_string})
        
        terms = normalize_query(query_string)
        
        for model, data in search_list.items():
            queries = get_query(terms, data['fields'])

            try:
                model_results = None
                for query in queries:
                    single_results = set(model.objects.filter(query).values_list('pk', flat=True))
                    #Convert queryset to python set and perform the 
                    #AND operation on the program and not as a query
                    if model_results == None:
                        model_results = single_results
                    else:
                        model_results &= single_results
                    
                results = model.objects.filter(pk__in=model_results)[:LIMIT]
                result_count += len(model_results)
                if results:
                    found_entries[data['text']] = results
                    for result in results:
                        if result not in object_list:
                            object_list.append(result)
            except FieldError, e:
                if request.user.is_staff or request.user.is_superuser:
                    messages.error(request, _(u'Search error: %s') % e)