Фильтрация языков в запросе зацикливания на кортеже (code, name_translated) - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно отфильтровать набор запросов на основе языкового поля (кода языка) из входных данных. Например, на итальянском языке пользователь может искать «итальянский». Итак, первое, что я сделал, это создал список кортежей, содержащий (lang_code, name_translated), как показано ниже:

from django.conf.global_settings import LANGUAGES
from django.utils.translation import get_language_info

# List of tuples (code, translated_name)
TRANSLATED_LANGUAGES = [(l[0], get_language_info(l[0])['name_translated']) for l in LANGUAGES]

Вот метод фильтрации:

def filter_by_languages(self, queryset, name, value):
    for l in TRANSLATED_LANGUAGES:
        if value in l[1].lower():
            queryset.filter(Q(lang_src__code__iexact=l[0]))
    return queryset.distinct()

Возвращает набор запросов, который не фильтруется. Я должен что-то неправильно понять.

1 Ответ

0 голосов
/ 10 мая 2019

Я неправильно построил набор запросов.Вот решение:

def filter_by_languages(self, queryset, name, value):
    search = []
    for l in TRANSLATED_LANGUAGES:
        if value in l[1].lower():
            search.append(l[0])
    return queryset.filter(lang_src__code__in=search)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...