Как отсортировать по полю с помощью ForeignKey

У меня есть кверисет всех объектов в модели Room. qs = Rooms.objects.all() Мне нужно отсортировать его по последнему полученному сообщению в таблице Message. Там у меня есть переменная room, которая имеет FK отношение к Room. Т.е. последний созданный объект Message, должен действовать как 1 Room, предпоследний должен идти вторым и т.д. Как я могу в Room сослаться на временную метку для сортировки? qs.order_by("message_room__timestamp") Я пытался сделать qs.order_by("message_room__timestamp"), но по какой-то причине я получаю очень странный ответ, я получаю дубликаты комнат

class Room(models.Model):
    name = models.CharField(max_length=255, unique=True)


class Message(models.Model):
    room = models.ForeignKey(Room, on_delete=models.CASCADE, default=None, null=True, related_name="message_room")
    text = models.CharField(max_length=255)
    timestamp = models.DateTimeField(auto_now_add=True)

Причина, по которой это происходит, заключается в том, что он будет делать LEFT OUTER JOIN на Message, и таким образом для каждого Message возвращать Room один раз, и таким образом одна и та же комната может встречаться несколько раз.

Вы можете аннотировать с наибольшей временной меткой, так:

from django.db.models import Max

Room.objects.alias(
    latest_message=Max('message_room__timestamp')
).order_by('latest_message')
Вернуться на верх