Я думаю, что это больше проблема с коллекцией, которую вы используете.Вы здесь используете фигурные кавычки ({}
) .Это set
.Набор неупорядоченных коллекций хэшируемых элементов, которые встречаются ноль или один раз.Но, как сказано, коллекция неупорядочена.Это означает, что нет никаких гарантий, если вы перечислите коллекцию в том порядке, в каком вы ее получите.
Используйте список или кортеж
Я думаю, вам лучше использовать list
или tuple
здесь, который представляет собой упорядоченный набор элементов.Для списков вы можете использовать квадратные скобки ([]
), для кортежей - круглые скобки (()
):
DURATION_CHOICES = <b>[</b>
(1, '30'),
(2, '45'),
(3, '60'),
(4, '75'),
(5, '90'),
(6, '105'),
(7, '120+'),
<b>]</b>
Сортировать коллекцию перед тем, как передать ее в качестве аргумента
Если вы хотите продолжать использовать набор, мы можем преобразовать его в список, прежде чем добавлять его в поле.Например, мы можем использовать sorted(..)
для сортировки по первому элементу кортежа:
from operator import itemgetter
duration = forms.ChoiceField(
choices=<b>sorted(DURATION_CHOICES, key=itemgetter(0))</b>,
widget=forms.widgets.RadioSelect,
label="Trainingsdauer in Minuten",
)
Обратите внимание, однако, что если вы сделаете изменения в наборе DURATION_CHOICES
, эти изменения не будут отражается в ChoiceField
, поскольку мы здесь сделали поверхностную копию списка.