Tags by category

This commit is contained in:
Kuroshini 2019-10-16 14:11:07 +03:00
parent e69f272a63
commit 0f8425f363
4 changed files with 17 additions and 32 deletions

View File

@ -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

View File

@ -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."""

View File

@ -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 = [

View File

@ -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 \