Каждый запрос может выполнить сортировку, используя order_by
:
posts_type1 = PostType1.objects.all().order_by('-created_date')
posts_type2 = PostType2.objects.all().order_by('-publish_date')
Если вы хотите, чтобы весь результат был отсортирован, вы можете использовать пользовательский итератор вместо chain
.Пример только для двух моделей (хотя не обязательно самых чистых):
def chain_ordered(qs1, qs2):
next1 = qs1.next()
next2 = qs2.next()
while next1 is not None or next2 is not None:
if next1 is None: yield next2
elif next2 is None: yeild next1
elif next1 < next2:
yield next1
try:
next1 = qs1.next()
except StopIteration:
next1 = None
else:
yield next2
try:
next2 = qs2.next()
except StopIteration:
next2 = None
Предложение StefanoP об использовании sorted
также будет работать, но AFAIK будет извлекать все элементы из базы данных во время сортировки, котораяили может не беспокоить вас.