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"