Extend establishment filterset

This commit is contained in:
evgeniy-st 2019-08-30 17:25:07 +03:00
parent 9e1bf5ba0e
commit 805bda3267
2 changed files with 34 additions and 8 deletions

View File

@ -1,16 +1,28 @@
from django_filters import FilterSet
"""Establishment app filters."""
from django.core.validators import EMPTY_VALUES
from django_filters import rest_framework as filters
from establishment import models
class EstablishmentFilter(FilterSet):
class EstablishmentFilter(filters.FilterSet):
"""Establishment filterset."""
tag_id = filters.NumberFilter(field_name='tags__metadata__id',)
award_id = filters.NumberFilter(field_name='awards__id',)
search = filters.CharFilter(method='search_text')
class Meta:
"""Meta class."""
model = models.Establishment
fields = (
'tag_id',
'award_id'
'award_id',
'search',
)
def search_text(self, queryset, name, value):
"""Search text."""
if value not in EMPTY_VALUES:
return queryset.search(value, locale=self.request.locale)
return queryset

View File

@ -1,4 +1,5 @@
"""Establishment models."""
from functools import reduce
from django.core.exceptions import ValidationError
from django.db import models
from django.utils.translation import gettext_lazy as _
@ -50,15 +51,26 @@ class EstablishmentSubType(ProjectBaseMixin, TraslatedFieldsMixin):
verbose_name = _('Establishment subtype')
verbose_name_plural = _('Establishment subtypes')
# def __str__(self):
# """__str__ method."""
# return self.name
def clean_fields(self, exclude=None):
if not self.establishment_type.use_subtypes:
raise ValidationError(_('Establishment type is not use subtypes.'))
class EstablishmentQuerySet(models.QuerySet):
"""Extended queryset for Establishment model."""
def search(self, value, locale=None):
"""Search text in JSON fields."""
if locale is not None:
filters = [
{f'name__{locale}__icontains': value},
{f'description__{locale}__icontains': value}
]
return self.filter(reduce(lambda x, y: x | y, [models.Q(**i) for i in filters]))
else:
return self.none()
class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin):
"""Establishment model."""
@ -89,6 +101,8 @@ class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin):
awards = generic.GenericRelation(to='main.Award')
tags = generic.GenericRelation(to='main.MetaDataContent')
objects = EstablishmentQuerySet.as_manager()
class Meta:
"""Meta class."""