if filterOption == 'contains': kw[f.field.name + "__icontains"] = filterValue elif filterOption == 'doesnotcontain': exclude[f.field.name + "__icontains"] = filterValue else: print "unknown filterOption %r" % filterOption if len(exclude): kw.update(exclude=exclude) if settings.SITE.use_gridfilters: filter = rqdata.get(constants.URL_PARAM_GRIDFILTER,None) if filter is not None: filter = json.loads(filter) kw['gridfilters'] = [constants.dict2kw(flt) for flt in filter] kw = ActionRequest.parse_req(self,request,rqdata,**kw) #~ raise Exception("20120121 %s.parse_req(%s)" % (self,kw)) #~ kw.update(self.report.known_values) #~ for fieldname, default in self.report.known_values.items(): #~ v = request.REQUEST.get(fieldname,None) #~ if v is not None: #~ kw[fieldname] = v quick_search = rqdata.get(constants.URL_PARAM_FILTER,None) if quick_search: kw.update(quick_search=quick_search) sort = rqdata.get(constants.URL_PARAM_SORT,None) if sort: #~ self.sort_column = sort
def parse_req(self, request, rqdata, **kw): #~ logger.info("20120723 %s.parse_req()",self.actor) #~ rh = self.ah master = kw.get('master', self.actor.master) if master is not None: """ If `master` is `ContentType` or some abstract model, then """ #~ if master is ContentType or master is models.Model: if master is ContentType or master._meta.abstract: mt = rqdata.get(constants.URL_PARAM_MASTER_TYPE) try: master = kw['master'] = ContentType.objects.get( pk=mt).model_class() except ContentType.DoesNotExist: pass # master is None if not 'master_instance' in kw: pk = rqdata.get(constants.URL_PARAM_MASTER_PK, None) #~ print '20100406a', self.actor,URL_PARAM_MASTER_PK,"=",pk #~ if pk in ('', '-99999'): if pk == '': pk = None if pk is None: kw['master_instance'] = None else: try: kw['master_instance'] = master.objects.get(pk=pk) except ValueError: raise Exception( "Invalid primary key %r for %s", pk, master.__name__) except master.DoesNotExist: # todo: ReportRequest should become a subclass of # Dialog and this exception should call dlg.error() raise Exception( "%s : There's no %s with primary key %r" % (self.actor, master.__name__, pk)) # ~ print '20100212', self #, kw['master_instance'] #~ print '20100406b', self.actor,kw if settings.SITE.use_filterRow: exclude = dict() for f in self.ah.store.fields: if f.field: filterOption = rqdata.get( 'filter[%s_filterOption]' % f.field.name) if filterOption == 'empty': kw[f.field.name + "__isnull"] = True elif filterOption == 'notempty': kw[f.field.name + "__isnull"] = False else: filterValue = rqdata.get('filter[%s]' % f.field.name) if filterValue: if not filterOption: filterOption = 'contains' if filterOption == 'contains': kw[f.field.name + "__icontains"] = filterValue elif filterOption == 'doesnotcontain': exclude[f.field.name + "__icontains"] = filterValue else: print "unknown filterOption %r" % filterOption if len(exclude): kw.update(exclude=exclude) if settings.SITE.use_gridfilters: filter = rqdata.get(constants.URL_PARAM_GRIDFILTER, None) if filter is not None: filter = json.loads(filter) kw['gridfilters'] = [constants.dict2kw(flt) for flt in filter] kw = ActionRequest.parse_req(self, request, rqdata, **kw) #~ raise Exception("20120121 %s.parse_req(%s)" % (self,kw)) #~ kw.update(self.report.known_values) #~ for fieldname, default in self.report.known_values.items(): #~ v = request.REQUEST.get(fieldname,None) #~ if v is not None: #~ kw[fieldname] = v quick_search = rqdata.get(constants.URL_PARAM_FILTER, None) if quick_search: kw.update(quick_search=quick_search) sort = rqdata.get(constants.URL_PARAM_SORT, None) if sort: #~ self.sort_column = sort sort_dir = rqdata.get(constants.URL_PARAM_SORTDIR, 'ASC') if sort_dir == 'DESC': sort = '-' + sort #~ self.sort_direction = 'DESC' kw.update(order_by=[sort]) offset = rqdata.get(constants.URL_PARAM_START, None) if offset: kw.update(offset=int(offset)) #~ limit = rqdata.get(constants.URL_PARAM_LIMIT,None) limit = rqdata.get(constants.URL_PARAM_LIMIT, self.actor.preview_limit) if limit: kw.update(limit=int(limit)) return self.actor.parse_req(request, rqdata, **kw)