Отображение значений в выпадающем списке в обратном порядке в Django Forms

class FineForm(forms.ModelForm):
    class Meta:
        model = Fine
        fields = ['student', 'fine']

        widgets = {
            'student': forms.Select(attrs={'class': 'form-control'}),
            'fine': forms.TextInput(attrs={'class': 'form-control'}),
         }

У меня есть форма Django. Поле student является внешним ключом. Я хочу в этой форме в шаблоне показывать студентов в обратном порядке. Помогите пожалуйста.

вы всегда можете сделать что угодно с выбором в форме.

Легкий, но не лучший способ:

class FineForm(forms.ModelForm):

    ... # your staff

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # after super() widget.choices in Select is a list
        self.fields['students'].widget.choices = self.fields['students'].widget.choices[::-1]

Мне не нравится это решение.

Вам нужно вернуть выбор только перед рендерингом, не так ли? Вот почему вы должны попробовать другие возможности:

  • add order_by in Student._meta
  • override order_by in self.fields['students'].queryset
  • используем собственный ModelChoiceGenerator для объектов Student.objects
  • используйте FormFieldCallback в FormFactory
  • определите свой собственный Field.widget.render или form.render
  • рендерите поле вручную в своем шаблоне
  • e.t.c (я не знаю ваш проект)
Вернуться на верх