Выбор порядка выбора моделей Django

При отображении следующих вариантов я хочу иметь возможность упорядочить их следующим образом Подготовка, Обзор, Обновление, Доработка и Завершение.

Сейчас они упорядочены в алфавитном порядке.

Ниже представлена простая модель:

class Choice(models.Model):
status_choices = [
        ("", "Select Current Status"),
        ("Preparation", "Preparation"),
        ("Review", "Review"),
        ("Update", "Update"),
        ("Finalised", "Finalised"),
        ("Completed", "Completed"),
    ]

    current_status = models.CharField(
        max_length=32,
        choices = status_choices,
        default = "Select current status",
    )

    class Meta:
            ordering = ["current_status"]

Я читал, что присвоение номера в кортеже может позволить упорядочить их, что я и попробовал сделать в соответствии с приведенным ниже описанием:

status_choices = [
        ("", "Select Current Status"),
        ("1", "Preparation"),
        ("2", "Review"),
        ("3", "Update"),
        ("4", "Finalised"),
        ("5", "Completed"),
    ]

Однако это ничего не изменило.

forms.py перечисленные ниже:

class TaskForm(ModelForm):
    class Meta:
        model = Choice
        fields = [
            'current_status',
            ]

        widgets = {
 
            'current_status' : forms.Select(attrs={'placeholder':'Select Current Status', 'class':'table_data_request_status'}),

            }

Мне кажется, что это должно быть очень просто, но, возможно, это не так.

Любая помощь будет очень признательна. Я просмотрел предыдущие вопросы, но безуспешно.

Я не уверен на 100%, как происходит упорядочивание чисел в charfields, но вы можете попробовать сделать число явным, изменив поле на smallintegerfield, как например:

class Choice(models.Model):

PREPARATION = 1
REVIEW = 2
UPDATE = 3
FINALISED = 4
COMPLETED = 5

status_choices = [
        ("", "Select Current Status"),
        (PREPARATION, "Preparation"),
        (REVIEW, "Review"),
        (UPDATE, "Update"),
        (FINALISED, "Finalised"),
        (COMPLETED, "Completed"),
    ]

    current_status = models.SmallIntegerField(
        choices = status_choices,
        default = 0
    )

    class Meta:
            ordering = ["current_status"]

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

 if choice_instance.current_status > Choice.UPDATE:

Из вашего вопроса я не понял, есть ли у вас проблемы с упорядочиванием самого виджета select. Если вышесказанное не поможет с виджетом, вы можете попробовать явно обратиться к списку status_choices, например,

  widgets = {
        'current_status' : forms.Select(choices = Choice.status_choices, attrs={'placeholder':'Select Current Status', 'class':'table_data_request_status'}),
        }
Вернуться на верх