Понимание множества в Python с несколькими полями объектов Django
У меня есть набор запросов с большим количеством атрибутов и потенциально 1000 строк. Я использую set comprehension для определения уникальных атрибутов в наборе запросов с целью создания выпадающих фильтров, которые помогают пользователям фильтровать объекты в таблице. В настоящее время я создал set comprehension для каждого фильтруемого атрибута.
Существует ли более эффективный способ получения этих уникальных значений атрибутов?
qs = Foo.objects.filter(criteria=unique_to_each_user)
filter_name = sorted({q.name for q in qs if q.name})
filter_group = sorted({q.group for q in qs if q.group})
filter_origin = sorted({q.origin for q in qs if q.origin})
Для нескольких атрибутов я также создаю кортеж, который содержит общее количество вместе с каждым уникальным атрибутом:
l_team = lambda x: x.team
team_totals = {total: sum(1 for q in qs) for total, qs in groupby(sorted(qs, key=l_team), l_team)}
filter_team = sorted({(q.team, team_totals.get(q.team)) for q in qs if q.team})
Я использую qs для других целей, и пытался избежать нескольких обращений к БД, выполняя действия по осмыслению набора на qs, в отличие от использования техники на уровне БД, такой как distinct - link. Однако эти действия по осмыслению множеств снижают производительность.
Возможно, я заблуждаюсь в том, что минимизация запросов к БД превыше всего? Есть ли лучший способ получить уникальные значения для нескольких атрибутов в наборе запросов?