Django 按后向外键排序

Django Sort by backward foreign key

我目前有以下型号

class ChatRoom(models.Model):
      creator = models.ForeignKey('User') # points to the initial user

class Message(models.Model):
      room = models.ForeignKey('ChatRoom')
      text = models.CharField(max_length=500)
      date = models.DateTimeField()
      from = models.ForeignKey('User') # points to some user

对于登录我网站的任何给定用户,我想显示他们创建的聊天室列表,按他们最后一条消息的日期(最新 activity)和最后一条消息排序进入聊天室

所以像

Your chat rooms
---------------
science - "hey guys, anyone know how to do calculus?" 5m
art     - "hey guys, I like art" 10m

我将如何在 Django 中执行此查询?请记住,一个人可能有很多很多聊天室,因此我们不能只用 ChatRoom.objects.all() 加载所有 chat_rooms 并手动遍历它。

您需要与您的最后一条消息有额外的关系,否则您将无法通过他们订购。

class ChatRoom(models.Model):
      creator = models.ForeignKey('User') # points to the initial user
      # you will need to set this in view or with signals.(don't forget to handle delete)
      last_message = models.ForignKey('Message')

而且你可以做到这一点

ChatRoom.objects.filter(...).order_by('last_message__date')