示例#1
0
class TripFilterSet(FilterSet):
    seats_left__gte = filters.NumberFilter(label="Assentos restantes ou mais",
                                           method='get_seats_left')
    origin_radius = filters.NumberFilter(
        label="Raio de pesquisa na origem em km", method='get_radius')
    destination_radius = filters.NumberFilter(
        label="Raio de pesquisa no destino em km", method='get_radius')
    origin = filters.CharFilter(label="Endereço de origem",
                                method='get_origin')
    destination = filters.CharFilter(label="Endereço de destino",
                                     method='get_destination')

    def get_seats_left(self, qs, name, value):
        seats_left = F('max_seats') - Coalesce(
            Sum('passengers__seats', filter=~Q(passengers__status="denied")),
            0)
        qs = qs.annotate(s_left=seats_left)
        val = value
        expr = name.split('__')[1] if len(name.split('__')) > 1 else 'exact'
        return qs.filter(**{f's_left__{expr}': val})

    def get_radius(self, qs, name, value):
        return qs

    def get_origin(self, qs, name, value):
        radius = self.data.get('origin_radius', '10')
        if not radius:
            radius = '10'
        radius = min(max(float(radius), 0.05), 20)
        pipe = RequestPipeline('origin', self.request)
        result = pipe.search(value)
        if result is None:
            return qs.none()
        return qs.filter(origin_point__distance_lte=(result.point,
                                                     D(km=radius)))

    def get_destination(self, qs, name, value):
        radius = self.data.get('destination_radius', '10')
        if not radius:
            radius = '10'
        radius = min(max(float(radius), 0.05), 20)
        pipe = RequestPipeline('destination', self.request)
        result = pipe.search(value)
        if result is None:
            return qs.none()
        return qs.filter(destination_point__distance_lte=(result.point,
                                                          D(km=radius)))

    class Meta:
        model = Trip
        fields = {
            'price': ['lte'],
            'datetime': ['exact', 'gte', 'lte'],
            'auto_approve': ['exact']
        }
示例#2
0
class BlogPostOverrideFilter(FilterSet):
    declared_publish_date__isnull = filters.NumberFilter(field_name='publish_date', lookup_expr='isnull')
    all_declared_publish_date = filters.AllLookupsFilter(field_name='publish_date')

    class Meta:
        model = BlogPost
        fields = {'publish_date': '__all__', }
示例#3
0
class RoleDetailFilter(FilterSet):
    active = filters.BooleanFilter()
    id = filters.NumberFilter()

    class Meta:
        Model = Note
        fields = [
            'active',
            'id',
        ]
示例#4
0
class AuditAreaListFilter(FilterSet):
    active = filters.BooleanFilter()
    company = filters.NumberFilter()

    class Meta:
        Model = AuditArea
        fields = [
            'active',
            'company',
        ]
示例#5
0
class SpecialtyTypeListFilter(FilterSet):
    active = filters.BooleanFilter()
    company = filters.NumberFilter()

    class Meta:
        Model = SpecialtyType
        fields = [
            'active',
            'company',
        ]
示例#6
0
class CategoryListFilter(FilterSet):
    active = filters.BooleanFilter()
    company = filters.NumberFilter()

    class Meta:
        Model = Category
        fields = [
            'active',
            'company',
        ]
示例#7
0
class IndicatorListFilter(FilterSet):
    active = filters.BooleanFilter()
    company = filters.NumberFilter()

    class Meta:
        Model = Indicator
        fields = [
            'active',
            'company',
        ]
示例#8
0
class NoteTypeListFilter(FilterSet):
    active = filters.BooleanFilter()
    type = filters.NumberFilter()

    class Meta:
        Model = NoteType
        fields = [
            'active',
            'type',
        ]
示例#9
0
class TemplateListFilter(FilterSet):
    active = filters.BooleanFilter()
    company = filters.NumberFilter()

    class Meta:
        model = Template
        fields = [
            'id',
            'active',
            'company',
        ]
示例#10
0
class AuditDetailFilter(FilterSet):
    categories = filters.RelatedFilter(CategoryListFilter,
                                       field_name="categories__parent",
                                       queryset=Audit.objects.all())
    active = filters.BooleanFilter()
    template = filters.NumberFilter()

    class Meta:
        Model = Audit
        fields = [
            'active',
            'categories',
            'template',
        ]
示例#11
0
class AuditListFilter(FilterSet):
    company = filters.RelatedFilter(TemplateListFilter,
                                    field_name="template__company__id",
                                    queryset=Template.objects.all())
    active = filters.BooleanFilter()
    template = filters.NumberFilter()

    class Meta:
        Model = Audit
        fields = [
            'active',
            'company',
            'template',
        ]
示例#12
0
class TemplateCategoryListFilter(FilterSet):
    template = filters.RelatedFilter(TemplateListFilter,
                                     field_name="template__id",
                                     queryset=Template.objects.all())
    active = filters.BooleanFilter()
    company = filters.NumberFilter()
    parent = filters.CharFilter()

    class Meta:
        Model = TemplateCategory
        fields = [
            'active',
            'company',
            'template',
            'parent',
        ]
示例#13
0
 class F(PostFilter):
     pk = filters.NumberFilter(name='id')