Extend establishment filterset
This commit is contained in:
parent
9e1bf5ba0e
commit
805bda3267
|
|
@ -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 django_filters import rest_framework as filters
|
||||||
|
|
||||||
from establishment import models
|
from establishment import models
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentFilter(FilterSet):
|
class EstablishmentFilter(filters.FilterSet):
|
||||||
|
"""Establishment filterset."""
|
||||||
|
|
||||||
tag_id = filters.NumberFilter(field_name='tags__metadata__id',)
|
tag_id = filters.NumberFilter(field_name='tags__metadata__id',)
|
||||||
award_id = filters.NumberFilter(field_name='awards__id',)
|
award_id = filters.NumberFilter(field_name='awards__id',)
|
||||||
|
search = filters.CharFilter(method='search_text')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
"""Meta class."""
|
||||||
|
|
||||||
model = models.Establishment
|
model = models.Establishment
|
||||||
fields = (
|
fields = (
|
||||||
'tag_id',
|
'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
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
"""Establishment models."""
|
"""Establishment models."""
|
||||||
|
from functools import reduce
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
@ -50,15 +51,26 @@ class EstablishmentSubType(ProjectBaseMixin, TraslatedFieldsMixin):
|
||||||
verbose_name = _('Establishment subtype')
|
verbose_name = _('Establishment subtype')
|
||||||
verbose_name_plural = _('Establishment subtypes')
|
verbose_name_plural = _('Establishment subtypes')
|
||||||
|
|
||||||
# def __str__(self):
|
|
||||||
# """__str__ method."""
|
|
||||||
# return self.name
|
|
||||||
|
|
||||||
def clean_fields(self, exclude=None):
|
def clean_fields(self, exclude=None):
|
||||||
if not self.establishment_type.use_subtypes:
|
if not self.establishment_type.use_subtypes:
|
||||||
raise ValidationError(_('Establishment type is not 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):
|
class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin):
|
||||||
"""Establishment model."""
|
"""Establishment model."""
|
||||||
|
|
||||||
|
|
@ -89,6 +101,8 @@ class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin):
|
||||||
awards = generic.GenericRelation(to='main.Award')
|
awards = generic.GenericRelation(to='main.Award')
|
||||||
tags = generic.GenericRelation(to='main.MetaDataContent')
|
tags = generic.GenericRelation(to='main.MetaDataContent')
|
||||||
|
|
||||||
|
objects = EstablishmentQuerySet.as_manager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user