コード例 #1
0
ファイル: filter.py プロジェクト: huameixiao123/E_commerce
class CouponFilter(django_filters.rest_framework.FilterSet):
    min_off = django_filters.NumberFilter(field_name='coupon_off',
                                          lookup_expr='gte')
    max_off = django_filters.NumberFilter(field_name='coupon_off',
                                          lookup_expr='lte')

    min_require = django_filters.NumberFilter(field_name='coupon_require',
                                              lookup_expr='gte')
    max_require = django_filters.NumberFilter(field_name='coupon_require',
                                              lookup_expr='lte')

    min_last = django_filters.DurationFilter(field_name='coupon_last',
                                             lookup_expr='gte')
    max_last = django_filters.DurationFilter(field_name='coupon_last',
                                             lookup_expr='lte')

    class Meta:
        model = Coupon
        fields = {
            'coupon_id': ['exact'],
            'coupon_off': ['exact'],
            'coupon_require': ['exact'],
            'coupon_category': ['exact'],
            'coupon_last': ['exact'],
        }
コード例 #2
0
class VideoFilterV2(filters.FilterSet):
    """Filter videos."""
    days_ago_lte = django_filters.NumberFilter(
        field_name='publication_date',
        method=partial(filter_date_ago, lookup_expr='gte'),
        label="Upload date, more recent than x days ago",
    )
    days_ago_gte = django_filters.NumberFilter(
        field_name='publication_date',
        method=partial(filter_date_ago, lookup_expr='lte'),
        label="Upload date, older than x days ago")
    duration_gte = django_filters.DurationFilter(field_name='duration',
                                                 lookup_expr='gte')
    duration_lte = django_filters.DurationFilter(field_name='duration',
                                                 lookup_expr='lte')

    views_gte = django_filters.NumberFilter(field_name='views',
                                            lookup_expr='gte')
    views_lte = django_filters.NumberFilter(field_name='views',
                                            lookup_expr='lte')

    language = django_filters.CharFilter(field_name='language')
    search = django_filters.CharFilter(field_name="name",
                                       method=identity,
                                       label="Search string")
    show_all_my_videos = django_filters.BooleanFilter(
        field_name="video_id",
        method=identity,
        label="Show all my videos in search")

    class Meta:
        model = Video
        fields = [
            'duration_gte', 'duration_lte', 'language', 'video_id',
            'days_ago_gte', 'days_ago_lte', 'views_gte', 'views_lte', 'search'
        ]

    def filter_empty(self, queryset):
        # removing empty videos
        queryset = queryset.exclude(name__exact='').exclude(
            score_preferences_term__isnull=True).exclude(
                name__isnull=True).exclude(views__exact=0).exclude(
                    score__exact=0.0).exclude(wrong_url=True).exclude(
                        download_failed=True).exclude(is_unlisted=True)
        return queryset
コード例 #3
0
class BuildingBlockTemplateFilter(ActiveFilterMixin, django_filters.FilterSet):
    term = django_filters.CharFilter(method="filter_by_term")
    type = django_filters.ChoiceFilter(choices=BuildingBlockType.choices,
                                       field_name="building_block_type")
    status = django_filters.MultipleChoiceFilter(
        choices=BuildingBlockStatus.choices, field_name="status")
    duration_start = django_filters.DurationFilter(field_name="duration",
                                                   lookup_expr="gte")
    duration_end = django_filters.DurationFilter(field_name="duration",
                                                 lookup_expr="lte")
    category = MultipleUUIDFilter()
    theme = MultipleUUIDFilter()
    created_by = MultipleUUIDFilter()

    class Meta:
        model = BuildingBlockTemplate
        fields = []

    def filter_by_term(self, queryset, name, value):
        return queryset.filter(
            Q(title__icontains=value) | Q(description__icontains=value))
コード例 #4
0
class WorkshopFilter(ActiveFilterMixin, django_filters.FilterSet):
    term = django_filters.CharFilter(field_name="title",
                                     lookup_expr="icontains")
    theme = MultipleUUIDFilter(field_name="themes")
    duration_start = django_filters.DurationFilter(field_name="duration",
                                                   lookup_expr="gte")
    duration_end = django_filters.DurationFilter(field_name="duration",
                                                 lookup_expr="lte")
    is_sensitive = django_filters.BooleanFilter(method="is_sensitive_filter")
    status = django_filters.MultipleChoiceFilter(
        choices=WorkshopStatusType.choices, field_name="workshop_status_type")
    created_by = MultipleUUIDFilter()

    def is_sensitive_filter(self, queryset, name, value):
        if value:
            return queryset.filter(
                building_blocks__template__is_sensitive=True).distinct()
        else:
            return queryset.exclude(
                building_blocks__template__is_sensitive=True).distinct()

    class Meta:
        model = Workshop
        fields = []