示例#1
0
        class F(FilterSet):
            price = NumberFilter(lookup_type='lt')
            average_rating = NumberFilter(lookup_type='gt')

            class Meta:
                model = Book
                fields = ['price', 'average_rating']
示例#2
0
 def test_filtering_exclude(self):
     qs = mock.Mock(spec=['exclude'])
     f = NumberFilter(exclude=True)
     f.filter(qs, 1)
     qs.exclude.assert_called_once_with(None__exact=1)
     # Also test 0 as it once had a bug
     qs.reset_mock()
     f.filter(qs, 0)
     qs.exclude.assert_called_once_with(None__exact=0)
示例#3
0
 def test_filtering(self):
     qs = mock.Mock(spec=['filter'])
     f = NumberFilter()
     f.filter(qs, 1)
     qs.filter.assert_called_once_with(None__exact=1)
     # Also test 0 as it once had a bug
     qs.reset_mock()
     f.filter(qs, 0)
     qs.filter.assert_called_once_with(None__exact=0)
示例#4
0
class PlayerScoreFilter(filters.SearchFilter):
    min_score = NumberFilter(field_name='score', lookup_expr='gte')
    max_score = NumberFilter(field_name='score', lookup_expr='lte')
    from_score_date = DateTimeFilter(field_name='score_date',
                                     lookup_expr='gte')
    to_scoreD_date = DateTimeFilter(field_name='scored_date',
                                    lookup_expr='lte')
    player_name = AllValuesFilter(field_name='player__name')
    game_name = AllValuesFilter(field_name='game__name')

    class Meta:
        model = PlayerScore
        fields = ('score', 'from_score_date', 'to_score_date', 'min_score',
                  'max_score', 'player_name', 'game_name')
示例#5
0
class SessaoPlenariaFilterSet(SaplFilterSetMixin):
    year = NumberFilter(method='filter_year')
    month = NumberFilter(method='filter_month')

    class Meta(SaplFilterSetMixin.Meta):
        model = SessaoPlenaria

    def filter_year(self, queryset, name, value):
        qs = queryset.filter(data_inicio__year=value)
        return qs

    def filter_month(self, queryset, name, value):
        qs = queryset.filter(data_inicio__month=value)
        return qs
示例#6
0
class ServiceAreaFilter(FilterSet):
    lat = NumberFilter(
        help_text="Latitude of a point to get intersected polygons")
    lng = NumberFilter(
        help_text="Longitude of a point to get intersected polygons")

    def filter_queryset(self, queryset):
        lat = self.form.cleaned_data.get('lat', None)
        lng = self.form.cleaned_data.get('lng', None)

        if lat and lng:
            point = Point(float(lat), float(lng))
            queryset = queryset.filter(polygon__intersects=point)

        return queryset
示例#7
0
class IndicatorFilter(filters.FilterSet):
    baseline = NumberFilter(method="get_baseline", label="Baseline")

    target = NumberFilter(method="get_target", label="Target")

    def get_target(self, queryset, name, value):
        return queryset.filter(target__v=value)

    def get_baseline(self, queryset, name, value):
        return queryset.filter(baseline__v=value)

    class Meta:
        model = Reportable
        fields = ('id', 'target', 'baseline', 'blueprint__title',
                  'blueprint__unit', 'indicator_reports')
示例#8
0
class EventSearchFilter(django_filters.FilterSet):
	ownership = MultipleChoiceFilter(choices=[('admin','Created'), ('joined',' Joined')], widget=forms.CheckboxSelectMultiple )
	location = ChoiceFilter(name='location',choices=[('Venue','Venue'), ('Online','Online')], widget=forms.Select(attrs={'class': 'selects'}))
	city = CharFilter(name="city", lookup_expr="icontains", widget=forms.TextInput(attrs={'placeholder': 'City'}))
	state = CharFilter(name="state", lookup_expr="icontains", widget=forms.TextInput(attrs={'placeholder': 'State'}))
	country = CharFilter(name="india", lookup_expr="icontains", widget=forms.TextInput(attrs={'placeholder': 'India'}))
	category = ChoiceFilter(name="category",choices=[('Adventure','Adventure'), ('Business & Tech','Business & Tech'), ('Entertainment','Entertainment'), ('Social','Social'), ('Sports','Sports'), ('Talks','Talks')], widget=forms.Select(attrs={'class': 'selects'}))
	gender = ChoiceFilter(name='gender',choices=[('Male','Male'), ('Female','Female'), ('Others','Others'), ('Any', 'Any')], widget=forms.Select(attrs={'class': 'selects'}))
	age_group = ChoiceFilter(name='age',choices=[('Under 18','Under 18'), ('18-30','18-30'), ('30-50','30-50'), ('Above 50','Above 50')], widget=forms.Select(), lookup_expr="icontains", label='Age Group')
	year = NumberFilter(label='Start Date', name='start_date',lookup_expr='year', widget=forms.NumberInput(attrs={'class': 'form_inps', 'placeholder': 'Year'}) )
	month = NumberFilter(label='Start Date', name='start_date',lookup_expr='month', widget=forms.NumberInput(attrs={'class': 'form_inps', 'placeholder': 'Month'}) )
	day = NumberFilter(label='Start Date', name='start_date',lookup_expr='day', widget=forms.NumberInput(attrs={'class': 'form_inps', 'placeholder': 'Day'}) )
	class Meta:
		model = Event
		fields = ['ownership']
示例#9
0
class F203Filter(FormFilter):
    f201 = NumberFilter()
    RHC = ChoiceFilter(widget=Select2Widget(),
                       choices=RHC.objects.as_choices())

    class Meta:
        model = F203

        fields = [
            'id',
            'f201',
            'SNER',
            'NNRT',
            'NNRT1',
            'NNST',
            'RHC',
            'CIR',
        ]

    def __init__(self, *args, **kwargs):
        super(F203Filter, self).__init__(*args, **kwargs)

        self.extend_filter('NNRT', State_Division_Choices)
        self.extend_filter('NNRT1', District_Choices)
        self.extend_filter('NNST', Township_or_town_Choices)
        self.extend_filter('CIR', Sub_code_No_Choices)
示例#10
0
class TripSearchFilter(django_filters.FilterSet):
	dayslist = [(str(i),'0'+str(i)) for i in [i for i in range(1,10)]] + [(str(i),str(i)) for i in [i for i in range(10,32)]]
	monthslist =  [(1,'Jan'), (2,'Feb'), (3,'Mar'), (4,'Apr'), (5,'May'), (6,'Jun'), (7,'Jul'), (8,'Aug'), (9,'Sep'), (10,'Oct'), (11,'Nov'), (12,'Dec')]
	yearslist = [(i, i) for i in range(2018,2050)]
	source = django_filters.CharFilter(label="Source:", lookup_expr='icontains', widget=forms.TextInput(attrs={}))
	destination = django_filters.CharFilter(label="Destination:", lookup_expr='icontains')
	company = ChoiceFilter(choices=[('Group','Group'), ('Solo','Solo')], widget=forms.Select() )
	moto = ChoiceFilter(label='Travel Moto',choices=[('','Any'), ('Adventure','Adventure'), ('Exploring','Exploring'), ('Photography','Photography'), ('Sports Event','Sports Event'), ('Food & Cuisine','Food & Cuisine'), ('Fitness','Fitness'), ('Shopping','Shopping'), ('Travel Blogging','Travel Blogging'), ('Partying','Partying'), ('Backtracking','Backtracking')], widget=forms.Select() )
	mode = ChoiceFilter(choices=[('Car','Car'), ('Motorbike','Motorbike'), ('Cycle','Cycle'), ('On-Foot','On-Foot'), ('Any', 'Any') ], widget=forms.Select() )
	year = NumberFilter(label='Start Date', name='start_date',lookup_expr='year', widget=forms.NumberInput(attrs={'class': 'search_inputs', 'placeholder': 'Year'}) )
	month = NumberFilter(label='Start Date', name='start_date',lookup_expr='month', widget=forms.NumberInput(attrs={'class': 'search_inputs', 'placeholder': 'Month'}) )
	day = NumberFilter(label='Start Date', name='start_date',lookup_expr='day', widget=forms.NumberInput(attrs={'class': 'search_inputs', 'placeholder': 'Day'}) )
	age_group = ChoiceFilter(choices=[('Under 18','Under 18'), ('18-30','18-30'), ('30-50','30-50'), ('Above 50','Above 50')], widget=forms.Select(), lookup_expr="icontains", label='Age Group' )
	#year = ChoiceFilter(name='start_date',choices=yearslist, widget=forms.Select(attrs={'class': 'search_inputs'}) )
	#start_date = django_filters.NumberFilter(name='start_date', lookup_expr='year')
	ownership = MultipleChoiceFilter(choices=[('admin','Created'), ('joined',' Joined')], widget=forms.CheckboxSelectMultiple )
	location = ChoiceFilter(choices=[('male','Male'), ('female','Female'), ('others','Others'), ('any','Any')], widget=forms.Select())
	gender = ChoiceFilter(choices=[('male','Male'), ('female','Female'), ('others','Others'), ('Any', 'Any')], widget=forms.Select(attrs={'class': 'selects'}))
	trip_id = django_filters.CharFilter(label="Trip id:", name="trip_id", lookup_expr='icontains', widget=forms.TextInput(attrs={}))

	class Meta:
		model = Trip
		fields = []
示例#11
0
class QuestionFilter(FilterSet):
    # Added at 2022-03-23. Added for backward compatibility.
    # TODO: Remove it after some time if required
    module = NumberFilter(field_name="group__module", lookup_expr="exact")

    class Meta:
        model = Question
        fields = {
            "title": ["exact"],
            "answer_type": ["exact"],
            "group": ["exact"],
            "group__module": ["exact"],
            "is_required": ["exact"],
        }
 def test_filtering(self):
     qs = mock.Mock(spec=['filter'])
     f = NumberFilter()
     f.filter(qs, 1)
     qs.filter.assert_called_once_with(None__exact=1)
     # Also test 0 as it once had a bug
     qs.reset_mock()
     f.filter(qs, 0)
     qs.filter.assert_called_once_with(None__exact=0)
 def test_filtering_exclude(self):
     qs = mock.Mock(spec=['exclude'])
     f = NumberFilter(exclude=True)
     f.filter(qs, 1)
     qs.exclude.assert_called_once_with(None__exact=1)
     # Also test 0 as it once had a bug
     qs.reset_mock()
     f.filter(qs, 0)
     qs.exclude.assert_called_once_with(None__exact=0)
示例#14
0
class LocationFilter(django_filters.FilterSet):
    loc_type = NumberFilter(method='get_loc_type')
    cluster_objectives = CharFilter(method='get_cluster_objectives')
    title = CharFilter(method='get_title')

    class Meta:
        model = Location
        fields = ['loc_type', 'cluster_objectives', 'title']

    def get_loc_type(self, queryset, name, value):
        return queryset.filter(gateway__admin_level=value)

    def get_cluster_objectives(self, queryset, name, value):
        return queryset.filter(
            gateway__country__workspaces__response_plans__clusters__cluster_objectives__in=value.split(','))

    def get_title(self, queryset, name, value):
        return queryset.filter(title__icontains=value)
示例#15
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        for instance_type in instance_type_choices:
            for score_type in score_types:
                field_name = str(instance_type[0]).replace(
                    '-', '_') + '_' + str(score_type[0])
                for lookup_expr in ['gte', 'lte']:
                    self.filters[field_name + '__' +
                                 lookup_expr] = NumberFilter(
                                     field_name=field_name,
                                     label=str(instance_type[1]) + ' ' +
                                     str(score_type[1]) + ' ' +
                                     verbose_lookup_expr(lookup_expr),
                                     lookup_expr=lookup_expr)
                self.filters[field_name + '__isnull'] = BooleanFilter(
                    field_name=field_name,
                    label=str(instance_type[1]) + ' ' + str(score_type[1]) +
                    ' ' + verbose_lookup_expr('isnull'),
                    lookup_expr='isnull')
示例#16
0
class DistribuidorFilterSet(FilterSet):
    tanqueVenta = NumberFilter(method='filter_field_gt',
                               field_name='tanque__disponibilidad_venta')
    tanqueRecarga = NumberFilter(method='filter_field_gt',
                                 field_name='tanque__disponibilidad_recarga')
    tanqueRenta = NumberFilter(method='filter_field_gt',
                               field_name='tanque__disponibilidad_renta')
    concentradorVenta = NumberFilter(
        method='filter_field_gt',
        field_name='concentrador__disponibilidad_venta')
    concentradorRenta = NumberFilter(
        method='filter_field_gt',
        field_name='concentrador__disponibilidad_renta')
    pagoConTarjeta = NumberFilter(method='filter_field_bool',
                                  field_name='pago_con_tarjeta')
    aDomicilio = NumberFilter(method='filter_field_bool',
                              field_name='a_domicilio')
    incluirBajas = NumberFilter(method='filter_field_bool',
                                field_name='dar_de_baja')
    abreSabado = NumberFilter(method='filter_field_bool',
                              field_name='abre_sabado')
    abreDomingo = NumberFilter(method='filter_field_bool',
                               field_name='abre_domingo')
    abierto24 = NumberFilter(method='filter_field_bool', field_name='abre_24h')
    gratis = NumberFilter(method='filter_field_bool',
                          field_name='recarga_gratis')
    nombreComo = CharFilter(method='filter_char_containts',
                            field_name='nombre_distribuidor__unaccent')

    def filter_field_gt(self, queryset, name, value):
        lookup = '__'.join([name, 'gt'])
        name_split = name.split('_')
        ofrece = '_'.join([name_split[0] + '_', 'ofrece', name_split[-1]])
        return queryset.filter(**{
            lookup: 0
        }).filter(**{
            ofrece: True
        }).distinct()

    def filter_field_bool(self, queryset, name, value):
        return queryset.filter(**{name: bool(value)}).distinct()

    def filter_char_containts(self, queryset, name, value):
        lookup = '__'.join([name, 'icontains'])
        return queryset.filter(**{lookup: value}).distinct()

    class Meta:
        model = Distribuidor
        fields = ('tanqueVenta', 'tanqueRecarga', 'tanqueRenta',
                  'concentradorVenta', 'concentradorRenta', 'pagoConTarjeta',
                  'aDomicilio', 'incluirBajas', 'nombreComo', 'abierto24',
                  'gratis', 'abreSabado', 'abreDomingo')
示例#17
0
class ImpressoEnderecamentoContatoFilterSet(FilterSet):

    FEMININO = 'F'
    MASCULINO = 'M'
    AMBOS = ''
    SEXO_CHOICE = ((AMBOS, _('Ambos')), (FEMININO, _('Feminino')),
                   (MASCULINO, _('Masculino')))

    DEPOIS_PRONOME = 'DP'
    LINHA_NOME = 'LN'
    DEPOIS_NOME = 'DN'
    LOCAL_CARGO_CHOICE = ((DEPOIS_PRONOME,
                           _('Depois do Pronome '
                             'de tratamento')),
                          (LINHA_NOME, _('Antes do Nome do Contato')),
                          (DEPOIS_NOME,
                           _('Entre o Nome do Contato '
                             'e seu Endereço')))

    FILHOS_CHOICE = [(None, _('Ambos'))] + YES_NO_CHOICES

    search = CharFilter(method='filter_search')
    sexo = ChoiceFilter(choices=SEXO_CHOICE)
    tem_filhos = ChoiceFilter(label=_('Com filhos?'), choices=FILHOS_CHOICE)

    idade = RangeFilter(label=_('Idade entre:'),
                        widget=RangeWidgetNumber,
                        method='filter_idade')

    impresso = ModelChoiceFilter(
        label=ImpressoEnderecamento._meta.verbose_name_plural,
        required=True,
        queryset=ImpressoEnderecamento.objects.all(),
        method='filter_impresso')

    grupo = ChoiceFilter(label=_('Contatos Agrupados'),
                         required=False,
                         method='filter_grupo')

    imprimir_pronome = ChoiceFilter(label=_('Imprimir Pronome?'),
                                    choices=YES_NO_CHOICES,
                                    required=True,
                                    initial=False,
                                    method='filter_imprimir_pronome')
    imprimir_cargo = ChoiceFilter(label=_('Imprimir Cargo?'),
                                  required=True,
                                  empty_label=None,
                                  choices=YES_NO_CHOICES,
                                  initial=False,
                                  method='filter_imprimir_cargo')

    fontsize = NumberFilter(label=_('Tamanho da Fonte'),
                            initial='',
                            max_value=100,
                            min_value=0,
                            max_digits=3,
                            decimal_places=0,
                            method='filter_fontsize')

    nome_maiusculo = ChoiceFilter(label=_('Nome Maiúsculo'),
                                  choices=YES_NO_CHOICES,
                                  initial=False,
                                  method='filter_nome_maiusculo')

    local_cargo = ChoiceFilter(label=_('Local para imprimir o Cargo'),
                               choices=LOCAL_CARGO_CHOICE,
                               initial=False,
                               method='filter_local_cargo')

    def filter_impresso(self, queryset, field_name, value):
        return queryset

    def filter_fontsize(self, queryset, field_name, value):
        return queryset

    def filter_grupo(self, queryset, field_name, value):
        if value == '0':
            queryset = queryset.filter(grupodecontatos_set__isnull=True)
        elif value != '':
            queryset = queryset.filter(grupodecontatos_set=value)
        return queryset

    def filter_local_cargo(self, queryset, field_name, value):
        return queryset

    def filter_imprimir_pronome(self, queryset, field_name, value):
        return queryset

    def filter_imprimir_cargo(self, queryset, field_name, value):
        return queryset

    def filter_nome_maiusculo(self, queryset, field_name, value):
        return queryset

    def filter_idade(self, queryset, field_name, value):
        idi = int(value.start) if value.start is not None else 0
        idf = int(
            value.stop) if value.stop is not None else date.today().year - 2

        if idi > idf:
            a = idi
            idi = idf
            idf = a

        # lim inicial-dt.mais antiga
        li = date.today() - relativedelta(years=idf + 1)
        # lim final - dt. mais nova
        lf = date.today() - relativedelta(years=idi)

        return queryset.filter(data_nascimento__gt=li, data_nascimento__lte=lf)

    def filter_search(self, queryset, field_name, value):

        query = normalize(value)

        query = query.split(' ')
        if query:
            q = Q()
            for item in query:
                if not item:
                    continue
                q = q & Q(search__icontains=item)

            if q:
                queryset = queryset.filter(q)
        return queryset

    def filter_data_nascimento(self, queryset, field_name, value):
        #_where = "date_part('year', age(timestamp '%s', data_nascimento)) != date_part('year', age(timestamp '%s', data_nascimento))"
        # return queryset.extra(where=_where, params=value)

        if not value[0] or not value[1]:
            return queryset

        now = datetime.datetime.strptime(value[0], "%d/%m/%Y").date()
        then = datetime.datetime.strptime(value[1], "%d/%m/%Y").date()
        if now > then:
            a = now
            now = then
            then = a

        # Build the list of month/day tuples.
        monthdays = [(now.month, now.day)]
        while now <= then:
            monthdays.append((now.month, now.day))
            now += timedelta(days=1)

        # Tranform each into queryset keyword args.
        monthdays = (dict(
            zip(("data_nascimento__month", "data_nascimento__day"), t))
                     for t in monthdays)

        # Compose the djano.db.models.Q objects together for a single query.
        query = reduce(operator.or_, (Q(**d) for d in monthdays))

        # Run the query.
        return queryset.extra(
            select={
                'month': 'extract( month from data_nascimento )',
                'day': 'extract( day from data_nascimento )',
            }).order_by('month', 'day', 'nome').filter(query)

    data_nascimento = DataRangeFilter(widget=RangeWidgetOverride,
                                      method='filter_data_nascimento')

    class Meta:
        model = Contato
        fields = [
            'search', 'sexo', 'tem_filhos', 'data_nascimento',
            'tipo_autoridade'
        ]
        """filter_overrides = {
            models.DateField: {
                'filter_class': DataRangeFilter,
                'extra': lambda f: {
                    'label': '%s (%s)' % (f.verbose_name, _('Inicial - Final')),
                    'widget': RangeWidgetOverride
                }
            }
        }"""

    def __init__(self, data=None, queryset=None, prefix=None, **kwargs):

        workspace = kwargs.pop('workspace')

        super(ImpressoEnderecamentoContatoFilterSet,
              self).__init__(data=data,
                             queryset=queryset,
                             prefix=prefix,
                             **kwargs)

        col1 = to_row([
            ('search', 6),
            ('sexo', 3),
            ('tem_filhos', 3),
            ('data_nascimento', 6),
            ('idade', 6),
            ('tipo_autoridade', 6),
            ('grupo', 6),
        ])

        col2 = to_row([
            ('impresso', 12),
            ('fontsize', 4),
            ('nome_maiusculo', 4),
            ('imprimir_pronome', 4),
            ('imprimir_cargo', 5),
            ('local_cargo', 7),
        ])

        row = to_row([
            (Fieldset(
                _('Informações para Seleção de Contatos'), col1,
                to_row([(SubmitFilterPrint(
                    'filter',
                    value=_('Filtrar'),
                    css_class='btn-outline-primary pull-right',
                    type='submit'), 12)])), 6),
            (Fieldset(
                _('Informações para Impressão'), col2,
                to_row([(SubmitFilterPrint('print',
                                           value=_('Imprimir'),
                                           css_class='btn-primary pull-right',
                                           type='submit'), 12)])), 6)
        ])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(row, )

        self.form.fields['search'].label = _('Nome/Nome Social/Apelido')
        self.form.fields['data_nascimento'].label = '%s (%s)' % (
            _('Aniversário'), _('Inicial - Final'))

        self.form.fields['tem_filhos'].choices.choices[0] = (None, _('Ambos'))

        self.form.fields['grupo'].choices = [
            ('0', _('Apenas Contatos sem Grupo')),
        ] + [(g.pk, str(g))
             for g in GrupoDeContatos.objects.filter(workspace=workspace)]
        class F(FilterSet):
            price = NumberFilter(lookup_type=['lt', 'gt', 'exact'])

            class Meta:
                model = Book
                fields = ['price']
        class F(FilterSet):
            price = NumberFilter(lookup_type='lt')

            class Meta:
                model = Book
                fields = ['price']
 def test_default_field(self):
     f = NumberFilter()
     field = f.field
     self.assertIsInstance(field, forms.DecimalField)
示例#21
0
 class B(FilterSet):
     f = NumberFilter()
示例#22
0
 class F(A, B):
     f2 = NumberFilter()
     f5 = CharFilter()
示例#23
0
 class A(Base):
     f3 = NumberFilter()