У меня есть 3 разные модели ModelA, ModelB, ModelC, все они связаны с пользователем. Итак, я хочу показать их в списке, упорядоченном по дате (бесконечная прокрутка вниз). Но это начинает занимать слишком много времени, чтобы загрузить их сразу.
Мой вид ajax:
...
list1 = user.modela_list.all()
list2 = user.modelb_list.all()
list3 = user.modelc_list.all()
result = list1 + list2 + list3
return render(request,'template.html',context = {'result':result})
Шаблон (я использую тег шаблона regroup, чтобы сгруппировать их по DateTimeField, который у них есть):
<div class = "tab-pane fade show active" id = "tab1" role = "tabpanel">
{% regroup result by date.date as result_list %}
{% for group_by_date in result_list %}
<div class = "section-title">{{ group_by_date.grouper }}</div>
<div >
{% for object in group_by_date.list %}
....
{% endfor %}
</div>
</div>
{% endfor %}
</div>
Это создает что-то вроде этого:
Итак, теперь, вместо того, чтобы просто загружать все объекты, я не хочу разбивки на страницы, но я не могу это понять. Как получить правильное количество объектов ModelA, ModelB и ModelC по дате?:
#I can't do just this
list1 = user.modela_list.all()[0:5]
list2 = user.modelb_list.all()[0:5]
list3 = user.modelc_list.all()[0:5]
Если я хочу 15 элементов на загрузку, сколько из моделей A, B и C я должен показать.
Надеюсь, я объяснил себя. Спасибо!
Просто возьмите 15 первых из каждой модели в порядке по дате, прежде чем передавать результат в шаблон.
list1 = user.modela_list.all().order_by('date')[0:15]
list2 = user.modelb_list.all().order_by('date')[0:15]
list3 = user.modelc_list.all().order_by('date')[0:15]
all_lists = list1 + list2 + list3
result = your_order_by_date_method(all_lists)[0:15]