Самый эффективный способ сделать непрерывную последовательность объектов в Django - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть модель как:

city =  CharField()
order = PositiveIntegerField(default=0)

, и я хотел бы исправить последовательность и сделать ее бесперебойной. Например, если у меня есть:

London 0
Paris 5
Boston 7

Мне нужно удалить пробелы и преобразовать его в:

London 0
Paris 1
Boston 2

Я могу добиться этого с помощью чего-то вроде:

current_order = 0
cities = City.objects.all().order_by('order')
for city in cities:
    if not current_order:
        current_order = city.order
    else:
        city.order = current_order
        city.save()
    current_order += 1

Мне показалось, что это решение совершенно неэффективно, поскольку оно многократно обращается к БД, поэтому я думаю, как добиться более эффективного поведения, предпочтительнее с помощью механизма БД (PostgreSQL).

...