Пример #1
0
class SeveralFieldsFilter(FilterSet):
    text = filters.CharFilter(lookup_expr='icontains')
    decimal = filters.NumberFilter(lookup_expr='lt')
    date = filters.DateFilter(lookup_expr='gt')

    class Meta:
        model = FilterableItem
        fields = ['text', 'decimal', 'date']
Пример #2
0
class ResultSetFilter(filterset.FilterSet):
    election_id = filters.CharFilter(field_name="ballot__election__slug")
    election_date = filters.DateFilter(
        field_name="ballot__election__election_date"
    )

    class Meta:
        model = ResultSet
        fields = ["election_date", "election_id"]
Пример #3
0
class CollectionImportFilter(filterset.FilterSet):
    namespace = filters.CharFilter(field_name='namespace__name')
    created = filters.DateFilter(field_name='created_at')

    sort = OrderingFilter(fields=(('created_at', 'created'), ))

    class Meta:
        model = models.CollectionImport
        fields = ['namespace', 'name', 'version']
Пример #4
0
class ShiftFilter(FilterSet):
    date_start__lte = filters.DateFilter(name='date_start',
                                         lookup_expr='date__lte')
    date_start__gte = filters.DateFilter(name='date_start',
                                         lookup_expr='date__gte')
    date_end__lte = filters.DateFilter(name='date_end',
                                       lookup_expr='date__lte')
    date_end__gte = filters.DateFilter(name='date_end',
                                       lookup_expr='date__gte')

    class Meta:
        model = Shift
        fields = (
            'date_start__lte',
            'date_start__gte',
            'date_end__lte',
            'date_end__gte',
        )
Пример #5
0
class AppStatFilter(django_filters.FilterSet):
    date_from = filters.DateFilter(field_name='date', lookup_expr='gte')
    date_to = filters.DateFilter(field_name='date', lookup_expr='lte')
    os = filters.CharFilter(method="filter_os")
    channel = filters.CharFilter(lookup_expr='iexact')
    country = filters.CharFilter(lookup_expr='iexact')
    group_by = filters.MultipleChoiceFilter(choices=GROUP_BY_CHOICES,
                                            method='group_the_query')
    o = filters.OrderingFilter(fields=('date', 'channel', 'country', 'os',
                                       'impressions', 'clicks', 'installs',
                                       'spend', 'revenue', 'cpi'), )

    @staticmethod
    def filter_os(qs, field_name, value):
        if value.lower() == 'android':
            value = AppStat.ANDROID
        elif value.lower() == 'ios':
            value = AppStat.IOS
        else:
            value = None

        return qs.filter(os=value)

    def group_the_query(self, qs, field_name, group_by_fields):
        can_display_fields = list(
            set(self.data) & set(['date', 'os', 'channel', 'country']))
        group_by_fields = group_by_fields + can_display_fields

        return qs.values(*group_by_fields).annotate(
            impressions=models.Sum('impressions'),
            clicks=models.Sum('clicks'),
            installs=models.Sum('installs'),
            spend=models.Sum('spend'),
            revenue=models.Sum('revenue'),
            cpi=models.ExpressionWrapper(
                models.F('spend') / models.F('installs'),
                output_field=models.FloatField())).order_by(*group_by_fields)

    class Meta:
        model = AppStat
        fields = '__all__'
Пример #6
0
class CollectionImportFilter(filterset.FilterSet):
    namespace = filters.CharFilter(field_name='galaxy_import__namespace__name')
    name = filters.CharFilter(field_name='galaxy_import__name')
    version = filters.CharFilter(field_name='galaxy_import__version')
    created = filters.DateFilter(field_name='galaxy_import__created_at')
    versioning_class = versioning.UIVersioning

    sort = OrderingFilter(fields=(('galaxy_import__created_at', 'created'), ))

    class Meta:
        model = PulpCollectionImport
        fields = ['namespace', 'name', 'version']
Пример #7
0
class PlanFilter(django_filters.FilterSet):
    """plan filter"""
    name = django_filters.CharFilter(
        name='name',
        lookup_expr='exact',
    )
    cpu = django_filters.MultipleChoiceFilter(
        name='cpu',
        choices=range(4),
    )

    memory = django_filters.MultipleChoiceFilter(
        name='memory',
        choices=range(8),
    )

    disk = django_filters.MultipleChoiceFilter(
        name='disk',
        choices=range(4),
    )

    instance = django_filters.MultipleChoiceFilter(
        name='instance',
        choices=range(1, 4),
    )

    price = django_filters.MultipleChoiceFilter(
        name='price',
        choices=Plans.CHOICE,
    )
    #the time the plan created
    start_date = filters.DateFilter(name='created', lookup_expr='gte')

    end_date = filters.DateFilter(name='created', lookup_expr='lte')

    class Meta:
        model = Plans
        fields = ('start_date', 'end_date')
Пример #8
0
class ProductFilter(django_filters.FilterSet):
    """product filter set"""
    name = django_filters.CharFilter(name='product_name', lookup_expr='exact')

    plan = django_filters.ModelMultipleChoiceFilter(
        name='plans__pk',
        queryset=Plans.objects.all(),
        to_field_name='pk',
        label='name',
    )

    type = django_filters.MultipleChoiceFilter(
        name='product_type',
        choices=Products.TYPE_CHOICE,
    )
    # date = django_filters.DateFromToRangeFilter(
    #     name = "created",
    #     widget=RangeWidget(attrs={'display':'inline'}),
    # )
    start_date = filters.DateFilter(name='created', lookup_expr='gte')
    end_date = filters.DateFilter(name='created', lookup_expr='lte')
    q = django_filters.CharFilter(
        method='search',
        label='Search',
    )

    class Meta:
        model = Products
        fields = ['start_date', 'end_date']

    def search(self, queryset, name, value):

        if not value.strip():
            return queryset
        qs_filter = (Q(product_name__icontains=value)
                     | Q(product_type__icontains=value))
        return queryset.filter(qs_filter)
Пример #9
0
class HistoryFilter(FilterSet):
    date = filters.DateFilter(field_name='date__date',
                              help_text='date of change | '
                              'format: %Y-%m-%d %H:%M:%S')
    feature_id = filters.NumberFilter(field_name='feature_id',
                                      help_text='id of feature')
    user_id = filters.NumberFilter(field_name='user_id',
                                   help_text="id of user which changed")

    attribute = filters.CharFilter(field_name='attribute',
                                   help_text="name of changeable attribute")

    class Meta:
        model = History
        fields = ['feature_id', 'user_id', 'date', 'attribute']
Пример #10
0
class ItemFilter(FilterSet):

    name = filters.get_model_field(Item, 'name')
    created_at = filters.DateFilter(label='日(yyyy-mm-dd)',
                                    lookup_expr='contains')
    memo = filters.CharFilter(label='備考', lookup_expr='contains')

    order_by = MyOrderingFilter(fields=(('name', 'name'), ),
                                field_labels={
                                    'name': '氏名',
                                },
                                label='並び順')

    class Meta:
        model = Item
        fields = ('name', 'memo', 'created_at')
Пример #11
0
class ResultsFilterMixin(filterset.FilterSet):
    election_id = filters.CharFilter(
        field_name="ballot__election__slug",
        label="Election Slug",
        help_text="An election slug, used to get all "
        "results for a given election",
    )
    election_date = filters.DateFilter(
        field_name="ballot__election__election_date",
        label="Election Date",
        help_text="Election Date in ISO format",
    )
    last_updated = filters.DateTimeFilter(
        field_name="modified",
        lookup_expr="gt",
        label="Last updated",
        help_text="An ISO datetime",
    )
Пример #12
0
class RainfallRecordFilter(FilterSet):
    start_dt = filters.DateFilter(field_name="ts", lookup_expr="gte")
    end_dt = filters.DateFilter(field_name="ts", lookup_expr="lte")
Пример #13
0
class ObjectRecordFilterSet(FilterSet):
    type = ObjectTypeFilter(
        field_name="object__object_type",
        help_text=_("Url reference to OBJECTTYPE in Objecttypes API"),
        queryset=ObjectType.objects.all(),
        min_length=1,
        max_length=1000,
    )
    date = filters.DateFilter(
        method="filter_date",
        help_text=_(
            "Display record data for the specified material date, i.e. the specified "
            "date would be between `startAt` and `endAt` attributes. The default value is today"
        ),
    )
    registrationDate = filters.DateFilter(
        method="filter_registration_date",
        help_text=_(
            "Display record data for the specified registration date, i.e. the specified "
            "date would be between `registrationAt` attributes of different records"
        ),
    )
    data_attrs = filters.CharFilter(
        method="filter_data_attrs",
        validators=[validate_data_attrs],
        help_text=_(
            """Only include objects that have attributes with certain values.
Data filtering expressions are comma-separated and are structured as follows:
A valid parameter value has the form `key__operator__value`.
`key` is the attribute name, `operator` is the comparison operator to be used and `value` is the attribute value.
Note: Values can be string, numeric, or dates (ISO format; YYYY-MM-DD).

Valid operator values are:
%(operator_choices)s

`value` may not contain double underscore or comma characters.
`key` may not contain comma characters and includes double underscore only if it indicates nested attributes.

Example: in order to display only objects with `height` equal to 100, query `data_attrs=height__exact__100`
should be used. If `height` is nested inside `dimensions` attribute, query should look like
`data_attrs=dimensions__height__exact__100`
"""
        )
        % {"operator_choices": display_choice_values_for_help_text(Operators)},
    )

    class Meta:
        model = ObjectRecord
        fields = ("type", "data_attrs", "date", "registrationDate")
        form = ObjectRecordFilterForm

    def filter_data_attrs(self, queryset, name, value: str):
        parts = value.split(",")

        for value_part in parts:
            variable, operator, str_value = value_part.rsplit("__", 2)
            real_value = string_to_value(str_value)

            if operator == "exact":
                #  for exact operator try to filter on string and numeric values
                in_vals = [str_value]
                if real_value != value:
                    in_vals.append(real_value)
                queryset = queryset.filter(**{f"data__{variable}__in": in_vals})
            elif operator == "icontains":
                # icontains treats everything like strings
                queryset = queryset.filter(
                    **{f"data__{variable}__icontains": str_value}
                )

            else:
                # gt, gte, lt, lte operators
                queryset = queryset.filter(
                    **{f"data__{variable}__{operator}": real_value}
                )

        return queryset

    def filter_date(self, queryset, name, value: date):
        return queryset.filter_for_date(value)

    def filter_registration_date(self, queryset, name, value: date):
        return queryset.filter_for_registration_date(value)
Пример #14
0
class ObjectFilterSet(FilterSet):
    type = filters.CharFilter(field_name="object_type",
                              help_text=get_help_text("core.Object",
                                                      "object_type"))
    date = filters.DateFilter(
        method="filter_date",
        help_text=
        _("Display record data for the specified formal date, i.e. the specified "
          "date would be between `startAt` and `endAt` attributes. The default value is today"
          ),
    )
    registrationDate = filters.DateFilter(
        method="filter_registration_date",
        help_text=
        _("Display record data for the specified registration date, i.e. the specified "
          "date would be between `registrationAt` attributes of different records"
          ),
    )
    data_attrs = filters.CharFilter(
        method="filter_data_attrs",
        validators=[validate_data_attrs],
        help_text=_(
            """Only include objects that have attributes with certain values.
Data filtering expressions are comma-separated and are structured as follows:
A valid parameter value has the form `key__operator__value`.
`key` is the attribute name, `operator` is the comparison operator to be used and `value` is the attribute value.
Note: Values can be string or numeric. Dates are not supported.

Valid operator values are:
%(operator_choices)s
`value` may not contain double underscore or comma characters.
`key` may not contain comma characters and includes double underscore only if it indicates nested attributes.

Example: in order to display only objects with `height` equal to 100, query `data_attrs=height__exact__100`
should be used. If `height` is nested inside `dimensions` attribute, query should look like
`data_attrs=dimensions__height__exact__100`
""") % {"operator_choices": display_choice_values_for_help_text(Operators)},
    )

    class Meta:
        model = Object
        fields = ("type", "data_attrs", "date", "registrationDate")
        form = ObjectFilterForm

    def filter_data_attrs(self, queryset, name, value):
        parts = value.split(",")

        for value_part in parts:
            variable, operator, val = value_part.rsplit("__", 2)
            val_numeric = float(val) if is_number(val) else None

            if operator == "exact":
                #  for exact operator try to filter on string and numeric values
                in_vals = [val]
                if is_number(val):
                    in_vals.append(val_numeric)
                queryset = queryset.filter(
                    **{f"records__data__{variable}__in": in_vals})

            else:
                # only numeric
                queryset = queryset.filter(
                    **{f"records__data__{variable}__{operator}": val_numeric})

        return queryset

    def filter_date(self, queryset, name, value):
        return queryset.filter_for_date(value)

    def filter_registration_date(self, queryset, name, value):
        return queryset.filter_for_registration_date(value)