Reputation:
I'm trying to create a messaging App in django but I couldn't re-order the Users properly
Here's the Models,
class Message(models.Model):
sender = models.ForeignKey(User, related_name="sender")
receiver = models.ForeignKey(User, related_name="receiver")
msg_content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
Here's the View,
def message(request):
users = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user)).values('sender__first_name', 'receiver__first_name', 'receiver__id', 'sender__id').annotate(Max('id')).order_by('-id__max')
return render(request, 'chat/users.html', {'users': users})
Here's what I tried in Template,
{% for user in users %}
{% if user.sender__id != request.user.id %}
{{ user.sender__first_name }}
{% else %}
{{ user.receiver__first_name }}
{% endif %}
{% endfor %}
This code seems working fine but it's returning same user "Twice" as long as request.user send someone a message & that person replies back to it.
How can I fix this problem? Thank You . . .
Upvotes: 0
Views: 48
Reputation: 329
Use the following query:
def message(request):
users = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user)).values('sender__first_name', 'receiver__first_name', 'receiver__id', 'sender__id').annotate(Max('id', distinct = True)).order_by('-id__max')
return render(request, 'chat/users.html', {'users': users})
Hope it will work.
Upvotes: 1