Django按后退外键排序

时间:2016-10-21 05:44:33

标签: django django-queryset

我目前有以下型号

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

对于登录我网站的任何指定用户,我想显示他们创建的聊天室列表,按其上一条消息的日期(最新活动)以及输入聊天室的最后一条消息排序

类似

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

我如何在django中执行此查询?请记住,一个人可能有很多很多聊天室,因此我们无法使用ChatRoom.objects.all()加载所有聊天室并手动迭代它。

1 个答案:

答案 0 :(得分:2)

您需要与上一封邮件有额外的关系,否则您将无法按其订购。

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')