Как сортировать с помощью поля внешнего ключа в django и избежать множественных результатов одной и той же строки

Я хочу сортировать группы по их булевому полю 'is_favorite' из модели GroupUser. У меня есть две модели GroupUser, где есть внешний ключ к модели Group, теперь, когда я делаю запрос Group.objects.filter(is_active=True).order_by('groupuser__group_id__is_favorite'). я получаю группы несколько раз. Я пробовал использовать distict() в конечном наборе запросов, но все равно не получилось. Пожалуйста, предложите какой-нибудь другой способ или возможное решение. TIA.

Мы можем использовать аннотацию для подсчета количества любимых вещей у каждой группы. Затем мы можем использовать эту аннотацию для упорядочивания по

from django.db.models import Sum

Group.objects.filter(
    is_active=True
).annotate(
    total_favorites=Sum('groupuser_group_id__is_favorite')
).order_by(
    '-total_favorites'
)
Вернуться на верх