DRF Сортировка по аннотированному полю. Дублируется queryset

Есть модель некоторого поста с информацией с несколькими полями. Необходимо помечать просмотренные посты для конкретного пользователя. Это было реализовано с помощью поля в модели seen_by=models.ManytoManyField(User)

При создании просмотра я с помощью seen_by.add(user) добавляю запись о просмотре, после чего сохраняю объект. Связи обновляются корректно.

Далее есть необходимость вывести общий список постов при этом сверху показать те которые не прочитаны а далее прочитанные.

Я получаю Queryset следующим образом:

Post.objects.annotate(view_by_user=Case(When(seen_by__contains=user.id, then=1),default=0)).order_by("view_by_user", "start_date").filter(end_date__gte=now())

Когда seen_by содержит более одной связи в итоговом Queryset дублируются посты столько раз сколько связей в поле seen_by, то есть у меня на выходе в ответе есть несколько постов с одинаковым id. Как этого можно избежать ? Есть ли способ более оптимально хранить данные о просмотрах ? Заранее благодарю

Вернуться на верх