Пример #1
0
class AllFiltersPropertyFilterSet(PropertyFilterSet):
    prop_number_AllValuesFilter = PropertyAllValuesFilter(field_name='prop_number', lookup_expr='exact')
    prop_number_PropertyAllValuesMultipleFilter_OR = PropertyAllValuesMultipleFilter(field_name='prop_number', lookup_expr='exact', conjoined=False)  # OR
    prop_number_PropertyAllValuesMultipleFilter_AND = PropertyAllValuesMultipleFilter(field_name='prop_number', lookup_expr='exact', conjoined=True)  # OR
    prop_number_PropertyBaseCSVFilterNumber = PropertyBaseCSVFilterNumber(field_name='prop_number', lookup_expr='in')
    prop_number_PropertyBaseInFilterNumber = PropertyBaseInFilterNumber(field_name='prop_number', lookup_expr='in')
    prop_number_PropertyBaseRangeFilterNumber = PropertyBaseRangeFilterNumber(field_name='prop_number', lookup_expr='range')
    prop_is_true_PropertyBooleanFilter = PropertyBooleanFilter(field_name='prop_is_true', lookup_expr='exact')
    prop_text_PropertyCharFilter = PropertyCharFilter(field_name='prop_text', lookup_expr='exact')
    prop_number_PropertyChoiceFilter = PropertyChoiceFilter(field_name='prop_number', lookup_expr='exact', choices=NUMBER_CHOICES)
    prop_date_PropertyDateFilter = PropertyDateFilter(field_name='prop_date', lookup_expr='exact')
    prop_date_PropertyDateFromToRangeFilter = PropertyDateFromToRangeFilter(field_name='prop_date', lookup_expr='range')
    prop_date_PropertyDateRangeFilter = PropertyDateRangeFilter(field_name='prop_date', lookup_expr='exact')
    prop_date_time_PropertyDateTimeFilter = PropertyDateTimeFilter(field_name='prop_date_time', lookup_expr='exact')
    prop_date_time_PropertyDateTimeFromToRangeFilter = PropertyDateTimeFromToRangeFilter(field_name='prop_date_time', lookup_expr='range')
    prop_duration_PropertyDurationFilter = PropertyDurationFilter(field_name='prop_duration', lookup_expr='exact')
    prop_iso_date_time_PropertyIsoDateTimeFilter = PropertyIsoDateTimeFilter(field_name='prop_iso_date_time', lookup_expr='lt')
    prop_iso_date_time_PropertyIsoDateTimeFromToRangeFilter = PropertyIsoDateTimeFromToRangeFilter(field_name='prop_iso_date_time', lookup_expr='range')
    prop_number_PropertyMultipleChoiceFilter_OR = PropertyMultipleChoiceFilter(field_name='prop_number', lookup_expr='exact', conjoined=False, choices=NUMBER_CHOICES)
    prop_number_PropertyMultipleChoiceFilter_AND = PropertyMultipleChoiceFilter(field_name='prop_number', lookup_expr='exact', conjoined=True, choices=NUMBER_CHOICES)
    prop_number_PropertyNumberFilter = PropertyNumberFilter(field_name='prop_number', lookup_expr='exact')
    prop_number_PropertyOrderingFilter = PropertyOrderingFilter(fields=('prop_number', 'prop_number'))
    prop_number_PropertyRangeFilter = PropertyRangeFilter(field_name='prop_number', lookup_expr='range')
    prop_time_PropertyTimeFilter = PropertyTimeFilter(field_name='prop_time', lookup_expr='exact')
    prop_time_PropertyTimeRangeFilter = PropertyTimeRangeFilter(field_name='prop_time', lookup_expr='range')
    prop_number_PropertyTypedChoiceFilter = PropertyTypedChoiceFilter(field_name='prop_number', lookup_expr='exact', choices=NUMBER_CHOICES)
    prop_number_PropertyTypedMultipleChoiceFilter_OR = PropertyTypedMultipleChoiceFilter(field_name='prop_number', lookup_expr='exact', conjoined=False, choices=NUMBER_CHOICES)
    prop_number_PropertyTypedMultipleChoiceFilter_AND = PropertyTypedMultipleChoiceFilter(field_name='prop_number', lookup_expr='exact', conjoined=True, choices=NUMBER_CHOICES)
    prop_uuid_PropertyUUIDFilter = PropertyUUIDFilter(field_name='prop_uuid', lookup_expr='exact')
    prop_number_PropertyLookupChoiceFilter = PropertyLookupChoiceFilter(field_name='prop_number')

    class Meta:
        model = BenchmarkModel
        exclude = ['number', 'text', 'is_true', 'date', 'date_time', 'duration']
        class MixedFilterWithMultipleChoiceFilterSet(PropertyFilterSet):
            prop_number = PropertyMultipleChoiceFilter(
                field_name='prop_number',
                lookup_expr='exact',
                conjoined=False,  # OR
                choices=self.choices)

            class Meta:
                model = MultiFilterTestModel
                fields = ['text', 'is_true', 'date', 'date_time']
Пример #3
0
class MiscBooleanChoiceFiltersFilterSet(PropertyFilterSet):
    LOOKUP_CHOICES = [
        (True, 'Yes'),
        # (True, 'True'),
        # (True, 'GiveMeYes'),
        (False, 'No'),
        # (False, 'False'),
        # (False, 'GiveMeNo'),
    ]

    is_true_ChoiceFilter = ChoiceFilter(field_name='is_true',
                                        lookup_expr='exact',
                                        choices=LOOKUP_CHOICES)
    is_true_MultipleChoiceFilter = MultipleChoiceFilter(field_name='is_true',
                                                        lookup_expr='exact',
                                                        conjoined=False,
                                                        choices=LOOKUP_CHOICES)
    is_true_AllValuesFilter = AllValuesFilter(field_name='is_true',
                                              lookup_expr='exact')
    is_true_AllValuesMultipleFilter = AllValuesMultipleFilter(
        field_name='is_true', lookup_expr='exact', conjoined=False)
    # Typed Choice Filter might not have a blank option, skip
    #is_true_TypedChoiceFilter = TypedChoiceFilter(field_name='is_true', lookup_expr='exact', choices=LOOKUP_CHOICES, coerce=str)
    is_true_TypedMultipleChoiceFilter = TypedMultipleChoiceFilter(
        field_name='is_true',
        lookup_expr='exact',
        conjoined=False,
        choices=LOOKUP_CHOICES,
        coerce=str)

    prop_is_true_PropertyChoiceFilter = PropertyChoiceFilter(
        field_name='prop_is_true', lookup_expr='exact', choices=LOOKUP_CHOICES)
    prop_is_true_PropertyMultipleChoiceFilter = PropertyMultipleChoiceFilter(
        field_name='prop_is_true',
        lookup_expr='exact',
        conjoined=False,
        choices=LOOKUP_CHOICES)
    prop_is_true_PropertyAllValuesFilter = PropertyAllValuesFilter(
        field_name='prop_is_true', lookup_expr='exact')
    prop_is_true_PropertyAllValuesMultipleFilter = PropertyAllValuesMultipleFilter(
        field_name='prop_is_true', lookup_expr='exact', conjoined=False)
    # Typed Choice Filter might not have a blank option, skip
    #prop_is_true_PropertyTypedChoiceFilter = PropertyTypedChoiceFilter(field_name='prop_is_true', lookup_expr='exact', choices=LOOKUP_CHOICES, coerce=str)
    prop_is_true_PropertyTypedMultipleChoiceFilter = PropertyTypedMultipleChoiceFilter(
        field_name='prop_is_true',
        lookup_expr='exact',
        conjoined=False,
        choices=LOOKUP_CHOICES,
        coerce=str)

    class Meta:
        model = models.BooleanFilterModel
        exclude = ['is_true']
    class PropertyMultipleChoiceFilterSet(PropertyFilterSet):
        number = MultipleChoiceFilter(field_name='number',
                                      lookup_expr=lookup_xpr,
                                      conjoined=conjoined,
                                      choices=LOOKUP_CHOICES)
        prop_number = PropertyMultipleChoiceFilter(field_name='prop_number',
                                                   lookup_expr=lookup_xpr,
                                                   conjoined=conjoined,
                                                   choices=LOOKUP_CHOICES)

        class Meta:
            model = MultipleChoiceFilterModel
            fields = ['prop_number']
Пример #5
0
class PropertyMultipleChoiceFilterSet(PropertyFilterSet):

    number_contains_and = MultipleChoiceFilter(field_name='number',
                                               lookup_expr='contains',
                                               label='Number Contains <AND>',
                                               conjoined=True,
                                               choices=[])
    prop_number_contains_and = PropertyMultipleChoiceFilter(
        field_name='prop_number',
        lookup_expr='contains',
        label='Prop Number Contains <AND>',
        conjoined=True,
        choices=[])

    class Meta:
        model = models.MultipleChoiceFilterModel
        exclude = ['number']

    def __init__(self, *args, **kwargs):
        choices = [
            (num, F'Number: {num}')
            for num in models.MultipleChoiceFilterModel.objects.values_list(
                'number', flat=True).distinct()
        ]
        choices.append((-5, 'Number: -5'))
        choices.append((666, 'Number: 666'))

        self.base_filters['number_contains_and'].extra['choices'] = choices
        self.base_filters['prop_number_contains_and'].extra[
            'choices'] = choices

        add_supported_filters(self,
                              MultipleChoiceFilter,
                              'number',
                              PropertyMultipleChoiceFilter.supported_lookups,
                              choices=choices)
        add_supported_property_filters(
            self,
            PropertyMultipleChoiceFilter,
            'prop_number',
            PropertyMultipleChoiceFilter.supported_lookups,
            choices=choices)
        super().__init__(*args, **kwargs)
def test_default_lookup():
    my_filter = PropertyMultipleChoiceFilter(field_name='fake_field')
    assert my_filter.lookup_expr == 'exact'
def test_unsupported_lookup():
    with pytest.raises(ValueError):
        PropertyMultipleChoiceFilter(field_name='fake_field',
                                     lookup_expr='fake-lookup')
def test_supported_lookups(lookup):
    # Test expression not raises exception
    PropertyMultipleChoiceFilter(field_name='fake_field', lookup_expr=lookup)