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 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
|
||||
|
|
|
|||
|
|
@ -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."""
|
||||
|
|
|
|||
|
|
@ -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 = [
|
||||
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user