Wpis z mikrobloga

Mam dwa modele, powiedzmy model1 i model2. Te modele mają dwa wspólne pole i tylko ich potrzebuję w tym przypadku: name i slug. Mam stworzyć widok, w którym będzie 1000 obiektów z paginacją.
Przy małej ilości danych zrobiłem to w ten sposób:

data = list( sorted( chain( model1.objects.all(), model2.objects.all()) ) )
a potem wrzucałem to do Paginatora (paginator = Paginator(data, 1000))

No i wszystko było fajnie przy małej ilości danych, ale teraz testuje jak to wygląda przy 1.5mln rekordów w jednym i drugim modelu. Jest okrutnie wolno. Jak wrzuce queryset jednego modelu do Paginatora to jest wszystko ok.
Próbowałem zrobić .union z values_list ale też jest cholernie wolno.

Co proponujecie?

#django #programowanie #python #programista #orm #postgresql
  • 4
tylko ich potrzebuję w tym przypadku: name i slug

model1.objects.all(), model2.objects.all()


@Spofity: czemu przerabiasz 1.5 miliona wierszy pytonem? Nie da się przewalić odpowiedzialności na bazę danych? W sensie - zobacz sobie czy nie fajniej będzie napisać sqla / (albo czymś co udostępnia django ;p) który po stronie bazy np zrobi jakąś tabelę tymczasową z danymi których potrzebujesz i po prostu zgarnij output.