Как получить уникальные значения в наборе запросов?
У меня есть следующие записи в таблице сообщений
и я хочу получить все получатель, где отправитель равен 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)
но он возвращает дубликаты результатов, как показано ниже.
Как я могу получить только отдельные/уникальные записи. Например, {отправитель: 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])