Django: колонка order_by из другой таблицы

Я создаю форум и имею следующую модель для сообщений:

class Message(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    text = models.TextField(max_length=100000)
    date_publication = models.DateTimeField(auto_now_add=True)


class Discussion(Message):
    title = models.CharField(max_length=500)
    views = models.PositiveBigIntegerField(default=0)


class Response(Message):
    topic = models.ForeignKey(Discussion, on_delete=models.CASCADE)
    reply_to = models.ForeignKey(
        Message, on_delete=models.CASCADE, related_name='message_replied', null=True)

Интересно, как я могу получить список обсуждений, упорядоченный по дате_публикации из Response.

Вы можете заказать с:

from django.db.models import Max
from django.db.models.functions import Coalesce

Discussion.objects.alias(
    latest_reply=Coalesce(Max('response__reply_to__date_publication'), 'date_publication')
).order_by('-latest_reply')

или для и более ранних версий:

from django.db.models import Max
from django.db.models.functions import Coalesce

Discussion.objects.annotate(
    latest_reply=Coalesce(Max('response__reply_to__date_publication'), 'date_publication')
).order_by('-latest_reply')

Я исправил это следующим образом:

from django.db.models import Max
from django.db.models.functions import Coalesce

Discussion.objects.alias(
    latest_reply=Coalesce(
        Max('response__date_publication'), 'date_publication')
).order_by('-latest_reply')
Вернуться на верх