Как отсортировать список объектов разных классов по дате Django?

Мне нужно получить список всех транзакций и вывести их по дате. Для меня проблема то, что в списке не все объекты одного класса. Подскажите, как это решить.

Классы:

class Transaction(models.Model):
    amount = models.PositiveIntegerField()
    date = models.DateField()
    commentary = models.TextField(blank=True)

    class Meta:
        abstract = True


class IncomeTransaction(Transaction):
    income_category = models.ForeignKey(IncomeCategory, on_delete=models.PROTECT)
    account = models.ForeignKey(Account, on_delete=models.PROTECT)


class ExpenseTransaction(Transaction):
    account = models.ForeignKey(Account, on_delete=models.PROTECT)
    expense_category = models.ForeignKey(ExpenseCategory, on_delete=models.PROTECT)


class InnerTransaction(Transaction):
    account_from = models.ForeignKey(Account, on_delete=models.PROTECT, related_name='inner_transaction_from_set')
    account_to = models.ForeignKey(Account, on_delete=models.PROTECT, related_name='inner_transaction_to_set')

В views.py такой код:

def history(request):
    url_name = request.resolver_match.url_name
    incomeT = IncomeTransaction.objects.all()
    expenseT = ExpenseTransaction.objects.all()
    innerT = InnerTransaction.objects.all()
    transactions=[incomeT, expenseT, innerT]
    return render(request, 'core/history.html', {'url_name': url_name, 'incomeT': incomeT, 'expenseT': expenseT, 'innerT': innerT, 'transactions': transactions})

Ответы (2 шт):

Автор решения: lumberspin

Ответ:

transactions = sorted((chain(incomeT, expenseT, innerT)), key=attrgetter('date'))
→ Ссылка
Автор решения: Andrey Maslov

Вообще тут на мой взгляд два варианта.

  1. получить все объекты и отсортировать из средствами питона.
  2. Написать отдельный sql запрос, который формирует выборку в нужном тебе порядке.

Плюсы первого случая - просто работаешь в рамках ORM и не паришься о том, что бы дополнительно как-то работать с SQL. ПО крайней мере на один запрос меньше чем в случае с отдельным SQL запросом. Минусы - сложней организовать разбиение на страницы, так как общую сортировку ты узнаешь уже после того как получил все данные с БД. В этом случае придется получать избыточные данные, которые нивелируют отсутствие лишнего запроса sql.

Если нужно просто вывести эти данные скопом на страницу, вполне подойдет первый вариант, если планируется как-то дополнительно фильтровать , сортировать по страницам, то я бы склонялся в сторону дополнительного sql Запроса.

→ Ссылка