use russian cities names for search params

This commit is contained in:
2025-05-27 11:51:51 +03:00
parent 46cd984395
commit bc3ef3fb57
11 changed files with 241 additions and 37 deletions

View File

@@ -22,14 +22,17 @@ class CountrySerializer(serializers.ModelSerializer):
return obj.international_name or obj.official_name
class CitySerializer(serializers.ModelSerializer):
value = serializers.CharField(source='name') # для совместимости с селектом
label = serializers.CharField(source='name') # для отображения в селекте
value = serializers.CharField(source='name') # для совместимости с селектом на фронте (используем английское название)
label = serializers.SerializerMethodField() # для отображения в селекте (используем русское название)
country_name = serializers.CharField(source='country.international_name')
class Meta:
model = City
fields = ['id', 'value', 'label', 'country_name']
def get_label(self, obj):
return obj.russian_name or obj.name # используем русское название если есть, иначе английское
class RouteSerializer(serializers.ModelSerializer):
from_city_name = serializers.SerializerMethodField()
to_city_name = serializers.SerializerMethodField()

View File

@@ -8,6 +8,7 @@ from django.shortcuts import get_object_or_404
from django.core.validators import validate_email
from django.core.exceptions import ValidationError
from django.db import models
from django.db.models import Q
from api.auth.serializers import UserResponseSerializer
from api.models import UserProfile
@@ -133,7 +134,10 @@ class CityView(ViewSet):
# поиск по названию города
search = request.query_params.get('search')
if search:
cities = cities.filter(name__icontains=search)
cities = cities.filter(
Q(name__icontains=search) | # поиск по английскому названию
Q(russian_name__icontains=search) # поиск по русскому названию
)
# ограничиваем количество результатов и сортируем по имени
cities = cities.order_by('name')[:100]