gault-millau/apps/collection/filters.py

57 lines
1.7 KiB
Python

"""Collection app filters."""
from django_filters import rest_framework as filters
from django.core.validators import EMPTY_VALUES
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. Allows to filter list of guides by choosen establishment. '
'Use for Establishment detail\'s sheet to content display within '
'"Collections & Guides" tab.'
)
class Meta:
"""Meta class."""
model = models.Guide
fields = (
'establishment_id',
)
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