Упорядочивание данных на основе поля «next»

#python #django

#python #django

Вопрос:

Привет, я программирую на python и хочу отобразить список в правильном порядке на основе next поля. У меня есть модель, которая выглядит как:

Задача()

 id     name     next
001      task1     007
005      task2     000
007      task3     005
  

Я не знаю, как это отобразить, потому что я знаю только базовое

 taskList = Task.objects.all()
  

поэтому, когда я его отображаю, оно должно выглядеть следующим образом

 task1
task3
task2
  

идентификатор первых данных равен 001, а их следующего поля — 007, что означает, что идентификатор следующих данных должен быть 007, а его следующее поле — 005 и так далее

Комментарии:

1. Это связанный список, откуда вы знаете, какой из них является первым ‘node’ (элементом). Вы могли бы рассмотреть возможность сохранения предыдущего поля, тогда у первого элемента было бы пустое (или нулевое) предыдущее поле

2. На самом деле это хорошее предложение. Ну, я меняю его на previous вместо next.

3. мне кажется, что при сохранении ‘next’ что-то не так в дизайне. Кроме того, модель django уже создает ‘id’, но вы добавляете второй? Чего вы пытаетесь достичь?

Ответ №1:

На мой взгляд, лучший подход — добавить Position поле. Вы можете повторно вычислить метод Position перезаписи save() , но будьте осторожны с блокировками и производительностью.

Также вы можете взглянуть на django-positions, которые выполняют всю работу за вас.

Ответ №2:

 taskList = Task.objects.all().order_by('next')
  

Вы также можете добавить его непосредственно в модель, используя опцию Meta

  class Task(models.Model):
       ...  
       class Meta:
            ordering = ['next']