Как получить уникальные значения в наборе запросов?

У меня есть следующие записи в таблице сообщений data

и я хочу получить все получатель, где отправитель равен 15, и все отправитель, где получатель равен 15. поэтому я использовал квери

class ContactListAPI(GenericAPIView, ListModelMixin ):
    def get_queryset(self):
        return Messages.objects.filter(Q(sender=15) | Q(receiver=15))
    serializer_class = ContactsSerializer
    permission_classes = (AllowAny,)

    def get(self, request , *args, **kwargs):
        return self.list(request, *args, **kwargs)

но он возвращает дубликаты результатов, как показано ниже.

result

Как я могу получить только отдельные/уникальные записи. Например, {отправитель: 15, получатель: 11} никогда не должен повторяться

Я также пробовал

Messages.objects.filter(sender=15).values_list('receiver', flat=True).union(
    Messages.objects.filter(receiver=15).values_list('sender', flat=True)
)

но это возвращает пустой массив

Вы можете использовать аннотацию с Count как трюк для достижения вашей цели следующим образом :

[UPDATE]

Согласно Django, вы также можете сделать следующее:

distinct = Messages.objects.values('sender').annotate(n=Count('sender')).filter(n=1)

records = Messages.objects.filter(sender__in=[item['sender'] for item in distinct])
Вернуться на верх