Home > Net >  Query selector sort
Query selector sort

Time:01-08

Inbox = Messages.objects.filter(Q(sender=request.user) | Q(receiver=request.user))
context['Inbox'] = Inbox

Currently I am using this to grab all messages for the currently logged in user.

I want to sort it by time and read status. So that the lastest unread message shows up first.

models.py

class Messages(models.Model):
    sender = models.ForeignKey(Profile,related_name='sender',on_delete=models.CASCADE)
    receiver = models.ForeignKey(Profile,related_name='receiver',on_delete=models.CASCADE)
    subject = models.CharField(default='',max_length=100)
    text = models.CharField(default='',max_length=4096)
    time = models.DateTimeField(auto_now_add=True)
    read = models.BooleanField(default=False)

    def __str__(self):
        return '{} to {} :{}'.format(self.sender,self.receiver,self.text)

CodePudding user response:

This can be achieved using the Model.objects.order_by(). In your case, this will look like this:

Inbox = Messages.objects.filter(Q(sender=request.user) | Q(receiver=request.user)).order_by("-time", "read")

Or "-read", depending if you want them to be sorted ascending/descending.

  •  Tags:  
  • Related