#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']