У меня есть модель django, которая содержит множество отношений типа
class MyModel(models.Model):
name = ..
refby = models.ManyToManyField(MyModel2)
..
class MyModel2(..):
name = ..
date = ..
Мне нужно отобразить его в моем шаблоне так, чтобы я мог отображать все объекты mymodel2, которые ссылаются на mymodel. В настоящее время я делаю что-то вроде следующего,
{% for i in mymodel_obj_list %}
{{i.name}}
{% for m in i.refby.all|dictsortreversed:"date"|slice:"3" %}
{{.. }}
{% endfor %}
<div> <!--This div toggles hidden/visible, shows next 12-->
{% for n in i.refby.all|dictsortreversed:"date"|slice:"3:15" %}
{{.. }}
{% endfor %}
</div>
{% endfor %}
Как показывает код, я хочу показать только последние 3 объекта mymodel2, отсортированные в обратном порядке по дате, хотя следующие 12 действительно загружаются.
Это очень неэффективный способ сделать это? (Учитывая, что результаты для refby.all могут составлять несколько сотен, а общее количество результатов в «mymodel_obj_list» также составляет 100 с - я использую там пагинатор).
В каком случае, какой лучший метод для предварительного вычисления этих refby и рендеринга их в шаблон? Должен ли я выполнить сортировку и вычисление в представлении, а затем передать его? Я не был уверен, как это сделать, чтобы сохранить свою нумерацию страниц.
Вид кода выглядит примерно так:
obj_list = Table.objects.filter(..) # Few 100 records
pl = CustomPaginatorClass(obj_list...)
И я передаю pl на страницу как mymodel_obj_list.
Спасибо!