diff --git a/apps/location/models.py b/apps/location/models.py index 942d78d0..cdc9ada5 100644 --- a/apps/location/models.py +++ b/apps/location/models.py @@ -7,7 +7,7 @@ from django.dispatch import receiver from django.utils.translation import gettext_lazy as _ from functools import reduce from typing import List - +from django.contrib.postgres.fields.jsonb import KeyTextTransform from django.contrib.postgres.fields import ArrayField @@ -81,19 +81,22 @@ class RegionQuerySet(models.QuerySet): def without_parent_region(self, switcher: bool = True): """Filter regions by parent region.""" - return self.filter(parent_region__isnull=switcher) + return self.filter(parent_region__isnull=switcher)\ + .order_by('name') def by_region_id(self, region_id): """Filter regions by region id.""" - return self.filter(id=region_id) + return self.filter(id=region_id)\ + .order_by('name') def by_sub_region_id(self, sub_region_id): """Filter sub regions by sub region id.""" - return self.filter(parent_region_id=sub_region_id) + return self.filter(parent_region_id=sub_region_id)\ + .order_by('name') def sub_regions_by_region_id(self, region_id): """Filter regions by sub region id.""" - return self.filter(parent_region_id=region_id) + return self.filter(parent_region_id=region_id).order_by('name') class Region(models.Model): diff --git a/apps/location/views/back.py b/apps/location/views/back.py index 4f29582d..125c2b0b 100644 --- a/apps/location/views/back.py +++ b/apps/location/views/back.py @@ -1,5 +1,7 @@ """Location app views.""" from rest_framework import generics +from django.contrib.postgres.fields.jsonb import KeyTextTransform +from utils.models import get_current_locale from location import models, serializers from location.views import common @@ -36,12 +38,13 @@ class CityListCreateView(common.CityViewMixin, generics.ListCreateAPIView): """Create view for model City.""" serializer_class = serializers.CitySerializer permission_classes = [IsAuthenticatedOrReadOnly | IsCountryAdmin] - # queryset = models.City.objects.all() + queryset = models.City.objects.all() filter_class = filters.CityBackFilter def get_queryset(self): """Overridden method 'get_queryset'.""" - qs = models.City.objects.all() + qs = models.City.objects.all().annotate(locale_name=KeyTextTransform(get_current_locale(), 'name_translated'))\ + .order_by('locale_name') if self.request.country_code: qs = qs.by_country_code(self.request.country_code) return qs @@ -51,7 +54,9 @@ class CityListSearchView(common.CityViewMixin, generics.ListCreateAPIView): """Create view for model City.""" serializer_class = serializers.CitySerializer permission_classes = [IsAuthenticatedOrReadOnly | IsCountryAdmin] - queryset = models.City.objects.all() + queryset = models.City.objects.all()\ + .annotate(locale_name=KeyTextTransform(get_current_locale(), 'name_translated'))\ + .order_by('locale_name') filter_class = filters.CityBackFilter pagination_class = None @@ -119,7 +124,7 @@ class RegionListCreateView(common.RegionViewMixin, generics.ListCreateAPIView): pagination_class = None serializer_class = serializers.RegionSerializer permission_classes = [IsAuthenticatedOrReadOnly | IsCountryAdmin] - ordering_fields = '__all__' + # ordering_fields = 'name' filter_class = RegionFilter @@ -132,7 +137,9 @@ class RegionRUDView(common.RegionViewMixin, generics.RetrieveUpdateDestroyAPIVie # Country class CountryListCreateView(generics.ListCreateAPIView): """List/Create view for model Country.""" - queryset = models.Country.objects.all() + queryset = models.Country.objects.all()\ + .annotate(locale_name=KeyTextTransform(get_current_locale(), 'name'))\ + .order_by('locale_name') serializer_class = serializers.CountryBackSerializer pagination_class = None permission_classes = [IsAuthenticatedOrReadOnly | IsCountryAdmin]