def get_filter_dict(self): filter = {} genders = self.options.get('genders', []) if genders: filter['gender__in'] = genders # Age age_min = self.options.get('age_min', None) age_max = self.options.get('age_max', None) request = getattr(self, 'request', None) if age_min: age_birthdate = utils.age_to_birthdate(age_min, request=request) filter['date_birth__lte'] = age_birthdate if age_max: age_birthdate = utils.age_to_birthdate(age_max, request=request) filter['date_birth__gte'] = age_birthdate # Registration Date reg_date_rel = self.options.get('reg_date_rel', None) reg_date_rel_mod = self.options.get('reg_date_rel_mod', 'months') reg_date_min = self.options.get('reg_date_min', None) reg_date_max = self.options.get('reg_date_max', None) if reg_date_rel: min_date = utils.relative_date_to_date(reg_date_rel, reg_date_rel_mod) filter['date_registration__gte'] = min_date if reg_date_min: filter['date_registration__gte'] = reg_date_min if reg_date_max: filter['date_registration__lte'] = reg_date_max return filter
def get_core_queryset(self, from_base=True): queryset = self.model.objects.all() #count_min = self.options['count_min'] #count_max = self.options['count_max'] filter = {} if self.options['tag_status'] == 'active' : filter['tagged_items__tag'] = self.options['tag'] filter['tagged_items__active'] = True #if count_min or count_max: #queryset = queryset.annotate(num_times = models.Count('tagged_items__tag')) else: filter['tagged_items__tag'] = self.options['tag'] filter['tagged_items__active'] = False date_rel = self.options['tag_date_rel'] date_rel_mod = self.options['tag_date_rel_mod'] date_min = self.options['tag_date_min'] date_max = self.options['tag_date_max'] if date_rel: min_date = utils.relative_date_to_date(date_rel, date_rel_mod) filter['tagged_items__tag_set__date_created__gte'] = min_date else: if date_min: filter['tagged_items__tag_set__date_created__gte'] = date_min if date_max: filter['tagged_items__tag_set__date_created__lte'] = date_max supporters = self.options['supporters'] if supporters: filter['tagged_items__tag_set__creator__userprofile__supporter__in'] = supporters queryset = queryset.filter(**filter) return queryset
def get_filter_dict_elections(self): filter_dict = {} elections = self.options.get('elections', None) if elections: mapped = [] for election in elections: mapped.append(election.id) filter_dict['id__in'] = mapped election_tags = self.options.get('elections', None) # FIXME - Implement tag based elections search election_date_rel = self.options.get('election_date_rel', None) election_date_rel_mod = self.options.get('election_date_rel_mod', None) election_date_min = self.options.get('election_date_min', None) election_date_max = self.options.get('election_date_max', None) if election_date_rel: min_date = utils.relative_date_to_date(election_date_rel, election_date_rel_mod) filter_dict['election_day__gte'] = min_date if election_date_min: filter_dict['election_day__gte'] = election_date_min if election_date_max: filter_dict['election_day__lte'] = election_date_max election_turnout_min = self.options.get('election_turnout_min', None) election_turnout_max = self.options.get('election_turnout_max', None) if election_turnout_min or election_turnout_max: # FIXME - this should be available globally total_voters = Voter.objects.count() if election_turnout_min: filter_dict['num_votes__gte'] = total_voters * (election_turnout_min / 100.) if election_turnout_max: filter_dict['num_votes__lte'] = total_voters * (election_turnout_max / 100.) return filter_dict