Esempio n. 1
0
    def appquery(self, djp):
        '''This function implements the search query.
The query is build using the search fields specifies in
:attr:`djpcms.views.appsite.ModelApplication.search_fields`.
It returns a queryset.
        '''
        qs = super(SearchView,self).appquery(djp)
        request = djp.request
        slist = self.appmodel.opts.search_fields
        if request.method == 'GET':
            data = dict(request.GET.items())
        else:
            data = dict(request.POST.items())
        search_string = data.get(self.search_text,None)
        if slist and search_string:
            bits  = smart_split(search_string)
            #bits  = search_string.split(' ')
            for bit in bits:
                bit = isexact(bit)
                if not bit:
                    continue
                or_queries = [Q(**{construct_search(field_name): bit}) for field_name in slist]
                other_qs   = QuerySet(self.appmodel.modelsearch())
                other_qs.dup_select_related(qs)
                other_qs   = other_qs.filter(reduce(operator.or_, or_queries))
                qs         = qs & other_qs    
        return qs
Esempio n. 2
0
 def get_response(self, djp):
     '''This response works only if it is an AJAX response. Otherwise it raises a ``Http404`` exception.'''
     request = djp.request
     if not request.is_ajax():
         raise djp.http.Http404
     params = dict(request.GET.items())
     query = request.GET.get('q', None)
     search_fields = self.appmodel.search_fields
     if query and search_fields:
         q = None
         for field_name in search_fields:
             name = construct_search(field_name)
             if q:
                 q = q | Q( **{str(name):query} )
             else:
                 rel_name = name.split('__')[0]
                 q = Q( **{str(name):query} )
         qs = self.model.objects.filter(q)                    
         data = ''.join([u'%s|%s|%s\n' % (getattr(f,rel_name),f,f.pk) for f in qs])
     else:
         data = ''
     return djp.http.HttpResponse(data)