From 0f8425f363ecb03cf0eeb098280a4c439e3c9fed Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Wed, 16 Oct 2019 14:11:07 +0300 Subject: [PATCH] Tags by category --- apps/tag/filters.py | 44 ++++++++++++++------------------------------ apps/tag/models.py | 2 +- apps/tag/urls/web.py | 2 +- apps/tag/views.py | 1 + 4 files changed, 17 insertions(+), 32 deletions(-) diff --git a/apps/tag/filters.py b/apps/tag/filters.py index ad53e18d..737bf3be 100644 --- a/apps/tag/filters.py +++ b/apps/tag/filters.py @@ -3,9 +3,7 @@ from django_filters import rest_framework as filters from establishment.models import EstablishmentType from tag import models - -class TagCategoryFilterSet(filters.FilterSet): - """TagCategory filterset.""" +class TagsBaseFilterSet(filters.FilterSet): # Object type choices NEWS = 'news' @@ -19,6 +17,18 @@ class TagCategoryFilterSet(filters.FilterSet): type = filters.MultipleChoiceFilter(choices=TYPE_CHOICES, 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( choices=EstablishmentType.INDEX_NAME_TYPES, method='by_establishment_type') @@ -30,42 +40,16 @@ class TagCategoryFilterSet(filters.FilterSet): fields = ('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 def by_establishment_type(self, queryset, name, value): return queryset.by_establishment_type(value) -class TagsFilterSet(filters.FilterSet): +class TagsFilterSet(TagsBaseFilterSet): """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: """Meta class.""" model = models.Tag 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 diff --git a/apps/tag/models.py b/apps/tag/models.py index 8c248a04..de4dcdca 100644 --- a/apps/tag/models.py +++ b/apps/tag/models.py @@ -84,7 +84,7 @@ class TagCategoryQuerySet(models.QuerySet): def for_news(self): """Select tag categories for news.""" - return self.filter(news_types__isnull=True) + return self.filter(news_types__isnull=False) def for_establishments(self): """Select tag categories for establishments.""" diff --git a/apps/tag/urls/web.py b/apps/tag/urls/web.py index ec63931e..f83c593a 100644 --- a/apps/tag/urls/web.py +++ b/apps/tag/urls/web.py @@ -7,7 +7,7 @@ app_name = 'tag' router = SimpleRouter() router.register(r'categories', views.TagCategoryViewSet) -router.register(r'chosen_tags', views.ChosenTagsView, basename='Tag') +router.register(r'chosen_tags', views.ChosenTagsView) urlpatterns = [ diff --git a/apps/tag/views.py b/apps/tag/views.py index e965f8b5..7d3fea79 100644 --- a/apps/tag/views.py +++ b/apps/tag/views.py @@ -11,6 +11,7 @@ class ChosenTagsView(generics.ListAPIView, viewsets.GenericViewSet): permission_classes = (permissions.AllowAny,) serializer_class = serializers.TagBaseSerializer filterset_class = filters.TagsFilterSet + queryset = models.Tag.objects.all() def get_queryset(self): result_tags_ids = models.ChosenTagSettings.objects \