Сортировка db по алфавиту с заголовком в django - PullRequest
0 голосов
/ 20 июня 2020

Написание веб-сайта на django:

У меня 1500 строк в DB

Нужно передать эти строки веб-интерфейсу, например:

A Alice Andrew Ann B Билл Борис Брендан ...

теперь в моем views.py цикл for проходит по именам, и если первая буква имени находится в алфавите, эта буква добавляется к моему новому алфавиту:

for name in names:
  if name[0] in alphabet:
    my_alphabet.append(name[0])
my_alphabet = sorted(list(set(my_alphabet)))

Затем я переношу свой новый алфавит и имена в шаблон html:

{% for letter in my_alphabet %}
  <span>{{ letter }}</span>
  {% for name in names %}
    {% if name.0 == letter %}
      <span>{{ name }}</span>
    {% endif %}
  {% endfor %}
{% endfor %}

Эти страницы загружаются до 10 секунд

Может быть, у кого-нибудь есть более быстрый вариант?

Спасибо за помощь, нуб, извините за потерянное время!

1 Ответ

0 голосов
/ 20 июня 2020

Встроенный тег шаблона regroup может использоваться для l oop с помощью списка / набора запросов и группировки по общему атрибуту.

from django.db.models.functions import Substr
objects = MyModel.objects.order_by('name').annotate(
    first_letter=Substr('name', 1, 1)
)

Приведенный выше набор запросов дает все MyModel экземпляров, аннотированных первой буквой поля имени. Затем вы можете использовать это в теге regroup

{% regroup objects by first_letter as letters %}

{% for letter in letters %}
  <span>{{ letter.grouper }}</span>
  {% for object in letter.list %}
      <span>{{ object.name }}</span>
  {% endfor %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...