Skip to content Skip to sidebar Skip to footer

Django: Distinct Users Filtering

I'm trying to build a messaging app. Here's my model, class Message(models.Model): sender = models.ForeignKey(User, related_name='sender') receiver = models.ForeignKey(User

Solution 1:

You need to write two queries. One is to fetch all the messages and another to get recipient list in order. receiver_list in following code will give you receiver list. Based on receiver list, you can filter out messages in template.

from django.db.models.aggregates import Max
data = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user))
receiver_list = data.filter(sender=request.user).values('receiver').annotate(max_time=Max('created_at').order_by('-max_time')

Solution 2:

Add distinct in your query

data = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user)).values('receiver').distinct().order_by()

This query will fetch all the distinct recievers from the message objects

Updated answer:-

.distinct([*fields]) will work with postgresql

data = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user)).order_by('receiver','-created_at').distinct('reciever')

Post a Comment for "Django: Distinct Users Filtering"