Tags by category
This commit is contained in:
parent
e69f272a63
commit
0f8425f363
|
|
@ -3,9 +3,7 @@ from django_filters import rest_framework as filters
|
||||||
from establishment.models import EstablishmentType
|
from establishment.models import EstablishmentType
|
||||||
from tag import models
|
from tag import models
|
||||||
|
|
||||||
|
class TagsBaseFilterSet(filters.FilterSet):
|
||||||
class TagCategoryFilterSet(filters.FilterSet):
|
|
||||||
"""TagCategory filterset."""
|
|
||||||
|
|
||||||
# Object type choices
|
# Object type choices
|
||||||
NEWS = 'news'
|
NEWS = 'news'
|
||||||
|
|
@ -19,6 +17,18 @@ class TagCategoryFilterSet(filters.FilterSet):
|
||||||
type = filters.MultipleChoiceFilter(choices=TYPE_CHOICES,
|
type = filters.MultipleChoiceFilter(choices=TYPE_CHOICES,
|
||||||
method='filter_by_type')
|
method='filter_by_type')
|
||||||
|
|
||||||
|
|
||||||
|
def filter_by_type(self, queryset, name, value):
|
||||||
|
if self.NEWS in value:
|
||||||
|
queryset = queryset.for_news()
|
||||||
|
if self.ESTABLISHMENT in value:
|
||||||
|
queryset = queryset.for_establishments()
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
class TagCategoryFilterSet(TagsBaseFilterSet):
|
||||||
|
"""TagCategory filterset."""
|
||||||
|
|
||||||
establishment_type = filters.ChoiceFilter(
|
establishment_type = filters.ChoiceFilter(
|
||||||
choices=EstablishmentType.INDEX_NAME_TYPES,
|
choices=EstablishmentType.INDEX_NAME_TYPES,
|
||||||
method='by_establishment_type')
|
method='by_establishment_type')
|
||||||
|
|
@ -30,42 +40,16 @@ class TagCategoryFilterSet(filters.FilterSet):
|
||||||
fields = ('type',
|
fields = ('type',
|
||||||
'establishment_type', )
|
'establishment_type', )
|
||||||
|
|
||||||
def filter_by_type(self, queryset, name, value):
|
|
||||||
if self.NEWS in value:
|
|
||||||
queryset = queryset.for_news()
|
|
||||||
if self.ESTABLISHMENT in value:
|
|
||||||
queryset = queryset.for_establishments()
|
|
||||||
return queryset
|
|
||||||
|
|
||||||
# todo: filter by establishment type
|
# todo: filter by establishment type
|
||||||
def by_establishment_type(self, queryset, name, value):
|
def by_establishment_type(self, queryset, name, value):
|
||||||
return queryset.by_establishment_type(value)
|
return queryset.by_establishment_type(value)
|
||||||
|
|
||||||
|
|
||||||
class TagsFilterSet(filters.FilterSet):
|
class TagsFilterSet(TagsBaseFilterSet):
|
||||||
"""Chosen tags filterset."""
|
"""Chosen tags filterset."""
|
||||||
|
|
||||||
# Object type choices
|
|
||||||
NEWS = 'news'
|
|
||||||
ESTABLISHMENT = 'establishment'
|
|
||||||
|
|
||||||
TYPE_CHOICES = (
|
|
||||||
(NEWS, 'News'),
|
|
||||||
(ESTABLISHMENT, 'Establishment'),
|
|
||||||
)
|
|
||||||
|
|
||||||
type = filters.MultipleChoiceFilter(choices=TYPE_CHOICES,
|
|
||||||
method='filter_by_type')
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
||||||
model = models.Tag
|
model = models.Tag
|
||||||
fields = ('type',)
|
fields = ('type',)
|
||||||
|
|
||||||
def filter_by_type(self, queryset, name, value):
|
|
||||||
if self.NEWS in value:
|
|
||||||
queryset = queryset.for_news()
|
|
||||||
if self.ESTABLISHMENT in value:
|
|
||||||
queryset = queryset.for_establishments()
|
|
||||||
return queryset
|
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ class TagCategoryQuerySet(models.QuerySet):
|
||||||
|
|
||||||
def for_news(self):
|
def for_news(self):
|
||||||
"""Select tag categories for news."""
|
"""Select tag categories for news."""
|
||||||
return self.filter(news_types__isnull=True)
|
return self.filter(news_types__isnull=False)
|
||||||
|
|
||||||
def for_establishments(self):
|
def for_establishments(self):
|
||||||
"""Select tag categories for establishments."""
|
"""Select tag categories for establishments."""
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ app_name = 'tag'
|
||||||
|
|
||||||
router = SimpleRouter()
|
router = SimpleRouter()
|
||||||
router.register(r'categories', views.TagCategoryViewSet)
|
router.register(r'categories', views.TagCategoryViewSet)
|
||||||
router.register(r'chosen_tags', views.ChosenTagsView, basename='Tag')
|
router.register(r'chosen_tags', views.ChosenTagsView)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ class ChosenTagsView(generics.ListAPIView, viewsets.GenericViewSet):
|
||||||
permission_classes = (permissions.AllowAny,)
|
permission_classes = (permissions.AllowAny,)
|
||||||
serializer_class = serializers.TagBaseSerializer
|
serializer_class = serializers.TagBaseSerializer
|
||||||
filterset_class = filters.TagsFilterSet
|
filterset_class = filters.TagsFilterSet
|
||||||
|
queryset = models.Tag.objects.all()
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
result_tags_ids = models.ChosenTagSettings.objects \
|
result_tags_ids = models.ChosenTagSettings.objects \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user