gault-millau/apps/collection/filters.py
2020-02-05 14:16:36 +03:00

63 lines
2.0 KiB
Python

"""Collection app filters."""
from django.core.validators import EMPTY_VALUES
from django_filters import rest_framework as filters
from collection import models
class CollectionFilterSet(filters.FilterSet):
"""Collection filter set."""
establishment_id = filters.NumberFilter(
field_name='establishments__id',
help_text='Establishment id. Allows to filter list of collections by choosen estblishment. '
'Use for Establishment detail\'s sheet to content display within '
'"Collections & Guides" tab.'
)
# "ordering" instead of "o" is for backward compatibility
ordering = filters.OrderingFilter(
# tuple-mapping retains order
fields=(
('rank', 'rank'),
('start', 'start'),
),
help_text='Ordering by fields - rank, start',
)
class Meta:
"""Meta class."""
model = models.Collection
fields = (
'ordering',
'establishment_id',
)
class GuideFilterSet(filters.FilterSet):
"""Guide filter set."""
establishment_id = filters.NumberFilter(
method='by_establishment_id',
help_text='Establishment id. It allows filtering list of guides by choosen establishment. '
'Use for Establishment detail\'s sheet to content display within '
'"Collections & Guides" tab.'
)
guide_type = filters.ChoiceFilter(
choices=models.Guide.GUIDE_TYPE_CHOICES,
help_text=f'It allows filtering guide list by type.'
f'Enum: {dict(models.Guide.GUIDE_TYPE_CHOICES)}'
)
class Meta:
"""Meta class."""
model = models.Guide
fields = (
'establishment_id',
'guide_type',
)
def by_establishment_id(self, queryset, name, value):
"""Filter by establishment id."""
if value not in EMPTY_VALUES:
return queryset.by_establishment_id(value)
return queryset