diff --git a/apps/tag/filters.py b/apps/tag/filters.py index 737bf3be..84a25528 100644 --- a/apps/tag/filters.py +++ b/apps/tag/filters.py @@ -1,6 +1,7 @@ """Tag app filters.""" from django_filters import rest_framework as filters from establishment.models import EstablishmentType +from django.conf import settings from tag import models class TagsBaseFilterSet(filters.FilterSet): @@ -53,3 +54,17 @@ class TagsFilterSet(TagsBaseFilterSet): model = models.Tag fields = ('type',) + + + # TMP TODO remove it later + # Временный хардкод для демонстрации 4 ноября, потом удалить! + def filter_by_type(self, queryset, name, value): + """ Overrides base filter. Temporary decision""" + if not (settings.NEWS_CHOSEN_TAGS and settings.ESTABLISHMENT_CHOSEN_TAGS): + return super().filter_by_type(queryset, name, value) + queryset = models.Tag.objects + if self.NEWS in value: + queryset = queryset.for_news().filter(value__in=settings.NEWS_CHOSEN_TAGS) + if self.ESTABLISHMENT in value: + queryset = queryset.for_establishments().filter(value__in=settings.ESTABLISHMENT_CHOSEN_TAGS) + return queryset \ No newline at end of file diff --git a/apps/tag/views.py b/apps/tag/views.py index 7d3fea79..a4beaaa0 100644 --- a/apps/tag/views.py +++ b/apps/tag/views.py @@ -1,9 +1,11 @@ """Tag views.""" +from django.conf import settings +from rest_framework import permissions from rest_framework import viewsets, mixins, status, generics from rest_framework.decorators import action from rest_framework.response import Response + from tag import filters, models, serializers -from rest_framework import permissions class ChosenTagsView(generics.ListAPIView, viewsets.GenericViewSet): @@ -21,6 +23,23 @@ class ChosenTagsView(generics.ListAPIView, viewsets.GenericViewSet): .filter(id__in=result_tags_ids) \ .order_by_priority() + def list(self, request, *args, **kwargs): + # TMP TODO remove it later + # Временный хардкод для демонстрации 4 ноября, потом удалить! + queryset = self.filter_queryset(self.get_queryset()) + + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + + serializer = self.get_serializer(queryset, many=True) + result_list = serializer.data + if request.query_params.get('type') and (settings.ESTABLISHMENT_CHOSEN_TAGS or settings.NEWS_CHOSEN_TAGS): + ordered_list = settings.ESTABLISHMENT_CHOSEN_TAGS if request.query_params.get('type') == 'establishment' else settings.NEWS_CHOSEN_TAGS + result_list = sorted(result_list, key=lambda x: ordered_list.index(x['index_name'])) + return Response(result_list) + # User`s views & viewsets class TagCategoryViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): diff --git a/project/settings/base.py b/project/settings/base.py index 0542180b..f4a7e9e9 100644 --- a/project/settings/base.py +++ b/project/settings/base.py @@ -490,3 +490,8 @@ PHONENUMBER_DB_FORMAT = 'NATIONAL' PHONENUMBER_DEFAULT_REGION = "FR" FALLBACK_LOCALE = 'en-GB' + +# TMP TODO remove it later +# Временный хардкод для демонстрации 4 ноября, потом удалить! +ESTABLISHMENT_CHOSEN_TAGS = ['gastronomic', 'en_vogue', 'terrace', 'streetfood', 'business', 'bar_cocktail', 'brunch', 'pop'] +NEWS_CHOSEN_TAGS = ['test'] \ No newline at end of file