예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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