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')
или для django-3.1 и более ранних версий:
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')