Write django query to select users and order users by latest conversation they had?

My models:

class User(models.Model):
    id = models.UUIDField(primary_key=True)
    first_name = models.Charfield()

class Conversation(models.Model):
    id = models.UUIDField(primary_key=True)
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
 
class Message(models.Model):
    id = models.UUIDField(primary_key=True)
    conversation = models.ForeignKey(Conversation, on_delete=models.PROTECT, null=False)
    text = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True, blank=True)

I tried to to order by adding annotate and adding order by. Can some body help me to select all users and order them by the latest message they had. I need user with latest message at to and then accordingly.

Try this

queryset = User.objects.all().order_by(
    '-conversation__message__created_at'
    ).distinct()
Back to Top